0

我对 Java 和 Android 中的列表有疑问。我使用以下代码读取所有用户联系人并将其保存在列表中:

List<ContactInfo> list = new ArrayList<ContactInfo>();
ContactInfo contactInfo = new ContactInfo();

do {
    contactInfo.name   = people.getString(indexName);
    contactInfo.phone  = people.getString(indexNumber);

    list.add(contactInfo);

} while (people.moveToNext());

在一切正常的情况下,姓名和电话正确,但列表未正确保存值(具体而言,它正确保存了值但不在执行中,每个值都被最后插入的值替换) . 它只是保存每个位置的最后一个联系人,但是如果我尝试调试他在执行过程中在每个位置添加的内容,它会显示正确的值。

这是我用来检查每个项目的代码

int i = 0;
for(ContactInfo info : list)
{
    Log.d(newMessage.TAG, "contactInfo(" + i + "): name = " + info.name + " ; phone = " + info.phone);
    ++i;
}

我已经解决了这个编辑的问题:

do {
    contactInfo = new ContactInfo();

    contactInfo.name   = people.getString(indexName);
    contactInfo.phone  = people.getString(indexNumber);

    list.add(contactInfo);

} while (people.moveToNext());

它会为每个联系人创建一个不同的 ContactInfo 实例,但是如果我在空闲时创建一个,为什么不工作呢?

而且,如果我为每个联系人创建一个不同的实例,如果联系人数量太多,它可能会导致内存泄漏/内存不足或类似情况?或者只是让应用程序变慢,因为 GC 应该清除内存?

4

1 回答 1

1

问题是当你按照自己的方式做时,对象会是一样的。对象的对象引用始终相同,因此唯一添加它的对象是第一个。

问候

于 2013-11-06T14:40:09.590 回答