Подтвердить что ты не робот

Окно курсора не может быть создано из связующего

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)

...

Любые идеи, почему он выбрасывает это исключение? Спасибо!

4b9b3361

Ответ 1

Я подозреваю, что ошибка может быть связана с тем, что вы не закрываете свои курсоры должным образом все время. Попробуйте:

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   }
6   cursor.close(); ///// Changed here
7 }

Курсор всегда должен быть закрыт (независимо от того, является ли его пустым). Убедитесь, что все остальное приложение также делает это.

Ответ 2

Попробуйте этот способ:

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

}

Ответ 3

Попробуйте другой поток

new Thread(new Runnable(){ public void run(){

...here all code

}});

. Но исходные коды Android SDK выглядят как 4.0.2_r1

 130  закрытый CursorWindow (Parcel источник) {
131 mStartPos = source. readInt();
132 mWindowPtr = nativeCreateFromParcel (источник);
133 if (mWindowPtr == 0) {
134 throw new CursorWindowAllocationException ( "Окно курсора не может быть"
135 +" создан из связующего. ");
136}
137 mName = nativeGetName (mWindowPtr);
138 mCloseGuard.open( "закрыть" );
139}
где mWIndowPtr - Int