无法从活页夹创建光标窗口

lor*_*tol 20 android cursor android-cursor

1 Cursor cursor = contentResolver.query(MY_URI, new String[] { "first" }, null, null, null);
2 if (cursor != null) {
3   if (cursor.moveToFirst()) {
4       first = cursor.getString(cursor.getColumnIndex("first"));
5       cursor.close();
6   }
7 }
Run Code Online (Sandbox Code Playgroud)

然后在第3行(根据日志),我偶尔会遇到这个例外(摘录如下):

android.database.CursorWindowAllocationException: Cursor window could not be created from binder.
    at android.database.CursorWindow.<init>(CursorWindow.java:134)
    at android.database.CursorWindow.<init>(CursorWindow.java:41)
    at android.database.CursorWindow$1.createFromParcel(CursorWindow.java:709)
    at android.database.CursorWindow$1.createFromParcel(CursorWindow.java:707)
    at android.database.CursorWindow.newFromParcel(CursorWindow.java:718)
    at android.database.BulkCursorProxy.getWindow(BulkCursorNative.java:196)
Run Code Online (Sandbox Code Playgroud)

...

任何想法为什么抛出这个例外?谢谢!

Jus*_*ler 26

我怀疑这个错误可能与你没有正确关闭游标有关.尝试:

Cursor cursor = contentResolver.query(MY_URI, new String[] { "first" }, null, null, null);
if (cursor != null) {
  if (cursor.moveToFirst()) {
      first = cursor.getString(cursor.getColumnIndex("first"));
  }
  cursor.close(); ///// Changed here
}
Run Code Online (Sandbox Code Playgroud)

应始终关闭光标(无论其是否为空).确保您的应用的其余部分也是这样做的.

  • close应始终位于finally块中.如果关闭之前代码的任何部分抛出异常,则不会关闭游标. (3认同)

GrI*_*sHu -1

试试这个方法:

 if (cursor != null) {
  cursor.moveToFirst();
   do {
   first = cursor.getString(cursor.getColumnIndex("first"));
  }while(cursor.moveToNext());
Run Code Online (Sandbox Code Playgroud)

}