无法从游标数据库读取第 0 行第 4 列

Failed to read row 0, column 4 from, Cursor Databasa

我对这个异常有疑问:

Failed to read row 0, column 4 from a CursorWindow which has 1 rows, 4 columns.

public ArrayList<Nota> listNote(){
    ArrayList<Nota> list = new ArrayList<Nota>();
    SQLiteDatabase db = this.getReadableDatabase();
    Cursor cursor = db.query("vasca", null, null, null, null, null, null);
    while(cursor.moveToNext()){
        Nota nota = new Nota(cursor.getInt(0), cursor.getString(1), cursor.getString(2), cursor.getString(3), cursor.getInt(4));
        list.add(nota);
    }
    cursor.close();
    db.close();
    return list;
}

Class Nota有3个String和1个int。

与硬编码索引相比,我更喜欢使用的一种方法是使用 Cursor.getColumnIndex(String name) 函数。尝试将其更改为:

Nota nota = new Nota(cursor.getInt(cursor.getColumnIndex("integerColumn")),
   cursor.getString(cursor.getColumnIndex("firstStringColumn")),
   cursor.getString(cursor.getColumnIndex("secondStringColumn")),
   cursor.getString(cursor.getColumnIndex("thirdStringColumn")));

这样您就不太可能出现此错误,或担心打字错误;特别是如果您的列名保存为变量。

您有四列,您是否正在尝试从五列中获取值。你说一个 int 一个三个字符串,但你正在从两个 int 中获取数据替换以下行:

Nota nota = new Nota(cursor.getInt(0), cursor.getString(1), cursor.getString(2), cursor.getString(3), cursor.getInt(4));

       With this

Nota nota = new Nota(cursor.getInt(0), cursor.getString(1), cursor.getString(2), cursor.getString(3));

希望这对您有所帮助。