web-dev-qa-db-ja.com

バインダーからカーソルウィンドウを作成できませんでした

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 }

次に、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)

.。

なぜこの例外をスローしているのか、何か考えはありますか?ありがとう!

20
villager

このエラーは、カーソルを常に適切に閉じていないことに関連している可能性があります。試してください:

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
}

カーソルは常に閉じている必要があります(空かどうかは関係ありません)。アプリの残りの部分もこれを実行していることを確認してください。

26

この方法を試してください:

 if (cursor != null) {
  cursor.moveToFirst();
   do {
   first = cursor.getString(cursor.getColumnIndex("first"));
  }while(cursor.moveToNext());

}

0
GrIsHu