java.lang.IllegalStateException: 无法从 CursorWindow 读取第 1 行第 4 列

java.lang.IllegalStateException: Couldn't read row 1, col 4 from CursorWindow

我正在尝试从 SQLite 数据库中获取值并将它们添加到 ArrayList。我不知道是什么问题。如果这些代码部分没有问题,我可以 post 更多代码。

@Override
public void onCreate(SQLiteDatabase db) {

    String sql ="create table tablo(id integer primary key,tipi text,turu text, miktar text, notlar text ) ";
    db.execSQL(sql);



 public List<String> listAll(){


    List<String>liste = new ArrayList<String>();
    Cursor c = db.rawQuery("select * from tablo",null);
    c.moveToFirst();

    while (c.moveToNext()){
        int id = c.getInt(0);
        String tipi=c.getString(1);
        String turu = c.getString(2);
        String miktar = c.getString(3);
        String notlar =c.getString(4);

        Data d = new Data(id,tipi,turu,miktar,notlar);
        String toSt =d.toString();
        liste.add(toSt);
    }

一个可能的原因是您通过添加 notlar 列更改了创建 table 的 SQL。

然而,仅更改该行不会进行更改,因为数据库助手的 onCreate 方法仅在创建数据库时运行。

此外,在 listAll 方法中,行 c.moveToFirst(); 很可能不需要,因为它会跳过第一行。因此,消息指示第 1 行而不是第 0 行出现问题。

要解决这些问题,

1) 修改代码删除c.moveToFirst();.

2) 执行以下操作之一:-

  • 删除应用程序的数据。
  • 卸载应用程序。

3) 重新运行应用程序。