【问题标题】:Android SQLite Error : java.lang.IllegalStateException: Couldn't read row 0, col 0 from CursorWindowAndroid SQLite 错误:java.lang.IllegalStateException:无法从 CursorWindow 读取第 0 行第 0 列
【发布时间】:2019-12-04 16:31:45
【问题描述】:

当我撰写 2MB 邮件并发送到我相同的电子邮件 ID 时。然后我试图回复相同的邮件[2MB]。它正在发送。打开回复邮件时,我收到以下错误。

错误:“java.lang.IllegalStateException:无法读取第 0 行,第 0 列 从光标窗口。确保光标已正确初始化 在从中访问数据之前。”

此行出现错误:

cursor.getString(0);

【问题讨论】:

  • 2MB 太大了。不要在数据库中存储那么大的东西。将其保存到文件系统,并将路径存储在数据库中。 stackoverflow.com/q/21432556

标签: android sqlite


【解决方案1】:

考虑首先获取列索引,然后尝试读取值。由于您没有发布代码,我只能建议以下内容:

cursor.getString(cursor.getColumnIndex(0));

例如,您的代码可能如下所示:

String query = "some_query_here";
Cursor cursor = db.rawQuery(query, null);

if(cursor.getCount() > 0) {
   cursor.moveToFirst();
   while(!cursor.isAfterLast()) {
      String result  = cursor.getString(cursor.getColumnIndex(0));
      cursor.moveToNext();
   }
   cursor.close();
} 

也许,您在初始化 Cursor 对象时犯了一个错误。考虑重新检查您的代码。

【讨论】:

  • 您好 Serj,我已经尝试过您的代码。它进入 if 块和 while 块。计数为 1。但它仍然抛出错误:无法从具有 0 行 2 列的 CursorWindow 读取第 0 行第 0 列。"java.lang.IllegalStateException: 无法从 CursorWindow 读取第 0 行第 0 列。确保游标在从中访问数据之前已正确初始化。”
【解决方案2】:

如果您的Cursor 返回任何行,那么它将包含至少 1 列索引为 0,因此不会出现错误。
但似乎它是空的(没有行)。
您需要检查是否存在任何行是moveToFirst(),如果存在第一行(因此任何行),则返回true

if (cursor.moveToFirst()) {
    String columnvalue = cursor.getString(0);  
} else {
    // write your code here
}

【讨论】:

  • 您好 Forpas,感谢您的回复。我检查了游标计数。计数为 1。然后我检查了 cursor.moveToFirst()。这是真的。然后它进入块。但我面临同样的错误:“java.lang.IllegalStateException:无法从 CursorWindow 读取第 0 行,第 0 列。请确保在从中访问数据之前正确初始化光标。”
  • 无法从有 0 行 2 列的 CursorWindow 读取第 0 行第 0 列。
【解决方案3】:

看起来您的行的数据大小超过 2MB,因此游标正在抛出 IllegalStateException。

【讨论】:

    猜你喜欢
    • 2014-02-21
    • 2017-05-22
    • 2016-07-29
    • 2015-08-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多