将Android光标转换为数组的ArrayList

x3naxklr  于 2023-05-21  发布在  Android
关注(0)|答案(3)|浏览(118)

我尝试将Cursor数据转换为数组列表。但是在最后,数组列表中的所有数据都被最后一行覆盖。我做错了什么?

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();
        }
332nm8kg

332nm8kg1#

试试这个

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是字符串数组。在原始代码中,多次向catalogueData结构中添加了相同的数组。每次都更改了数组内容的值,但它仍然是同一个数组对象。所以你最终得到了catalogueData,它保存了对一个数组的多个引用,而这个数组只能有一个data[0]的值:你最后设定的东西
这个答案通过为游标中的每一行使用一个新的不同数组来解决这个问题。

nbysray5

nbysray52#

试试这个:

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());
        }
isr3a4wc

isr3a4wc3#

String[] data = new String[3];放入while循环。每次迭代都会覆盖数组对象。

相关问题