将Android Cursor转换为数组的ArrayList

Luc*_*ano 3 android arraylist cursor

我尝试将我的Cursor数据转换为arraylist.但最后,arraylist中的所有数据都被最后一行所覆盖.我做错了什么?

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();
        }   
Run Code Online (Sandbox Code Playgroud)

War*_*ith 11

试试这个

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();
}
Run Code Online (Sandbox Code Playgroud)

data是一个字符串数组.在原始代码中,您catalogueData多次向结构添加相同的数组.您每次都更改了数组内容的值,但它仍然是相同的数组对象.所以你最终catalogueData持有对单个数组的多个引用,并且该数组只能有一个值data[0]:你设置它的最后一件事.

这个答案通过为游标中的每一行使用一个新的不同数组来解决这个问题.