You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Android Studio中SearchView显示Contact实体内存地址问题求助

问题原因

你看到的com.mahdi.roomdatabase.Data.entity.Contact@85c7ce6是Java对象默认的toString()输出——由类全名+对象哈希码组成。出现这个问题的核心原因是:你用ArrayAdapter展示Contact列表时,Adapter会默认调用每个Contact对象的toString()方法填充列表项,但你的Contact实体类没有重写这个方法,所以输出了系统默认的对象标识。

解决方法

有两种常用方案,按需选择即可:

方案1:重写Contact类的toString()方法(最简单)

直接在Contact实体类里重写toString()方法,返回你想在列表中展示的内容,比如姓名、电话等字段的组合:

public class Contact {
    // 你的实体类字段示例
    private int id;
    private String name;
    private String phone;

    // 构造方法、Getter/Setter...

    @Override
    public String toString() {
        // 根据需求拼接字段,比如显示姓名和电话
        return name + " | " + phone;
    }
}

修改后,ArrayAdapter会自动使用重写后的toString()结果填充列表项,就能显示正常的文本内容。

方案2:自定义Adapter(适合复杂列表项)

如果你的列表需要展示多字段(比如头像+姓名+电话)或自定义样式,就不能依赖toString()了,需要自定义Adapter:

  1. 创建自定义列表项布局(比如包含多个TextView的xml文件)
  2. 继承ArrayAdapter或BaseAdapter,在getView()方法中手动将Contact的字段绑定到对应View上

示例代码如下:

public class ContactAdapter extends ArrayAdapter<Contact> {
    private Context mContext;
    private List<Contact> mContacts;

    public ContactAdapter(Context context, List<Contact> contacts) {
        super(context, R.layout.custom_contact_item, contacts);
        mContext = context;
        mContacts = contacts;
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        View listItem = convertView;
        if (listItem == null) {
            listItem = LayoutInflater.from(mContext).inflate(R.layout.custom_contact_item, parent, false);
        }

        Contact currentContact = mContacts.get(position);

        TextView nameTv = listItem.findViewById(R.id.tv_name);
        TextView phoneTv = listItem.findViewById(R.id.tv_phone);

        nameTv.setText(currentContact.getName());
        phoneTv.setText(currentContact.getPhone());

        return listItem;
    }
}

然后在getDatabasefromDb()方法中替换为自定义Adapter:

private void getDatabasefromDb(String searchText) {
    searchText = "%" + searchText + "%";
    contacts = databaseNew.getDatabaseInfo(SearchActivity.this, searchText);

    arrayAdapter = new ContactAdapter(SearchActivity.this, contacts);
    listView.setAdapter(arrayAdapter);
}

内容的提问来源于stack exchange,提问作者Mehdi sahraei

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.21 13:16:16