android - 将 Android Cursor 转换为数组的 ArrayList

标签 android arraylist cursor

我尝试将我的游标数据转换为数组列表。但最后 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();
        }   

最佳答案

试试这个

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] 设置一个值:您将其设置为的最后一个值。

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

关于android - 将 Android Cursor 转换为数组的 ArrayList,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7388631/

相关文章:

java - 如何一次向数组列表添加多个值?

java - ArrayList 覆盖自身

java - 游标.getCount 始终 = 0

python - pygame.mouse.get_pos() 成两个单独的字符串

java - 应用程序因 java.lang.stackOverflow 异常而崩溃

android - 在 Android webview 中查看 PDF 文件

android - Switch isChecked bool 值 Android

javascript - 如何通过同一个流发送不同编码的数据?

java - 将数组对象传递给 jdbc 查询

java - 如何更改 JTextArea 中光标的默认位置?