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

求助:无法显示SQLite表内容,仅输出对象地址

解决SQLite查询结果显示对象地址而非数值的问题

嘿,我来帮你搞定这个问题!你看到的“对象地址”其实是Java默认的对象字符串表现形式,核心问题出在实体类没有重写toString()方法,另外你的代码里还有个类职责混淆的小问题,咱们一步步理顺:

第一步:纠正类职责混淆(关键前提)

你的databaseHandler应该是继承自SQLiteOpenHelper的数据库操作助手类,用来处理数据库创建、增删改查逻辑,但你现在把它当成了存储联系人数据的实体类来用,这会让代码逻辑混乱。

先创建一个专门的联系人实体类,比如Contact:

public class Contact {
    private int id;
    private String name;
    // 如果有手机号字段,也可以加上
    // private String phoneNumber;

    // 空参构造
    public Contact() {}

    // 带参构造
    public Contact(int id, String name) {
        this.id = id;
        this.name = name;
    }

    // Getter和Setter方法
    public int getId() { return id; }
    public void setId(int id) { this.id = id; }

    public String getName() { return name; }
    public void setName(String name) { this.name = name; }

    // 重点:重写toString()方法,自定义对象的字符串表现
    @Override
    public String toString() {
        return "联系人{" +
                "ID=" + id +
                ", 姓名='" + name + '\'' +
                // 如果有手机号,加上", 手机号='" + phoneNumber + '\'' +
                '}';
    }
}

第二步:修正getAllContacts()方法

把原来方法里的databaseHandler替换成咱们刚创建的Contact实体类,同时优化数据库操作的细节:

public List<Contact> getAllContacts() { 
    List<Contact> contactList = new ArrayList<>(); 
    // 查询语句
    String selectQuery = "SELECT * FROM " + TABLE_NAME; 
    // 查询用getReadableDatabase更高效,不需要写入权限
    SQLiteDatabase db = this.getReadableDatabase(); 
    Cursor cursor = db.rawQuery(selectQuery, null); 

    // 遍历游标封装数据
    if (cursor.moveToFirst()) { 
        do { 
            Contact contact = new Contact(); 
            // 直接用getInt获取数字类型,不用转字符串再转Integer
            contact.setId(cursor.getInt(0)); 
            contact.setName(cursor.getString(1)); 
            // 如果有手机号字段,加上contact.setPhoneNumber(cursor.getString(2));
            contactList.add(contact); 
        } while (cursor.moveToNext()); 
    } 
    // 记得关闭游标和数据库,避免内存泄漏
    cursor.close();
    db.close();
    return contactList; 
}

为什么这样能解决问题?

当你打印contactList里的对象时,Java默认会调用Object类的toString()方法,它的输出格式就是类名@哈希码(也就是你看到的“对象地址”)。咱们重写Contact类的toString()方法后,就会按照自定义的格式输出实体的字段值,比如联系人{ID=1, 姓名='张三'},这样就能看到你想要的数值内容了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.11 07:38:14