我的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());
在do-while一切正常的情况下,名称和手机是正确的,但是列表没有正确保存值(具体来说,它正确保存了值,但是在执行时 - 每个值都被替换为最后一个值插值)。 它只是保存了每个位置的最后一次接触,但是如果我尝试调试他在每个位置添加的内容,那么它会显示正确的值。
这是我用来检查do-while
中每个项目的代码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实例,但是如果我在do-while中创建了一个,那为什么不起作用呢?
而且,如果我为每个联系人创建一个不同的实例,如果联系人的数量太多,它可能会导致内存泄漏/内存不足或类似情况?或者可能只是让应用程序变慢,因为GC应该清除内存?
答案 0 :(得分:1)
问题是当你按照自己的方式进行操作时,对象将是相同的。对象的对象引用始终是相同的,因此唯一的对象是将它添加到第一个对象中。
迎接