将Android游标转换为数组的ArrayList
我尝试将光标数据转换为arraylist。但最后,arraylist中的所有数据都会被最后一行覆盖。我做错了什么将Android游标转换为数组的ArrayList,android,arraylist,cursor,Android,Arraylist,Cursor,我尝试将光标数据转换为arraylist。但最后,arraylist中的所有数据都会被最后一行覆盖。我做错了什么 Cursor c = myDbHelper.getLvl1Cata(); String[] data = new String[3]; c.moveToFirst(); while(!c.isAfterLast()) { data[0] = Integer.toString(c.getInt(0));
Cursor c = myDbHelper.getLvl1Cata();
String[] data = new String[3];
c.moveToFirst();
while(!c.isAfterLast()) {
data[0] = Integer.toString(c.getInt(0));
data[1] = c.getString(1);
data[2] = Integer.toString(c.getInt(2));
Log.e("cc", data[1]);
catalogueData.add(data);
c.moveToNext();
}
Put
String[]data=新字符串[3]将>编码到while循环中。每次迭代都会覆盖数组对象。试试这个
Cursor c = myDbHelper.getLvl1Cata();
String[] data;
if (c != null) {
while(c.moveToNext()) {
data = new String[3]; // Note this addition
data[0] = Integer.toString(c.getInt(0));
data[1] = c.getString(1);
data[2] = Integer.toString(c.getInt(2));
Log.e("cc", data[1]);
catalogueData.add(data);
}
c.close();
}
data
是字符串数组。在原始代码中,您多次将同一数组添加到catalogeData
结构中。您每次都更改了数组内容的值,但它仍然是同一个数组对象。因此,编目数据
保存了对单个数组的多个引用,而该数组只能有一个数据[0]
的值:您最后设置的值
此答案通过为光标中的每一行使用新的和不同的数组来修复此问题。尝试以下方法:
if(mycursor!=null){
do{
TextView name = (TextView)view.findViewById(R.id.contact_name);
name.setText(cursor.getString(cursor.getColumnIndex
(Displayname)));
mycursor.moveToNext();
}while (mycursor.isLast());
}
在android中,在循环中创建新对象是一种糟糕的做法!请看我的答案,声明和初始化分两步完成。@WarrenFaith:你能澄清一下在循环中创建新对象的意思吗?您的答案还将在循环中创建一个新对象,尽管您将变量的声明与对象的创建分开。@LarsH:他的答案的执行方式与我的完全相同。声明放在哪里并不重要。如果要保存数组集合,则必须在每次迭代时创建一组新数组,否则上一组数组将覆盖上一组数组。否则,如果在每次迭代时仅丢弃数组,则是这样。您可能希望在循环之外创建对象。嘿,Waren,我也在做同样的事情,我在CatalogEdata.add(data);,那到底是什么?请您引导我完成此操作。@Anupam您需要告诉我错误是什么,否则我将无能为力。@WarrenFaith是否有任何方法可以一次性读取光标并存储在数组列表中。如果我不想运行循环?@ShivamAgrawal否。光标只是指向数据的指针,您需要自己移动它。所以循环是唯一的机会。@Anupam catalozedata.add(数据);正在向arraylist目录数据添加数据。CatalozeData变量应该是List或ArrayList或类似的东西。