Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Cursor window could not be created from binder

Tags:

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 }

Then on line #3 (according to the logs), I every now and then I come across this exception (excerpt below):

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)

...

Any ideas why it is throwing this exception? Thanks!

like image 902
lorraine Avatar asked Jan 14 '13 09:01

lorraine


2 Answers

I suspect the error may be related to you not closing your cursors properly all the time. Try:

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
}

The cursor should always be closed (regardless of whether or not its empty). Make sure the rest of your app is doing this as well.

like image 171
Justin Breitfeller Avatar answered Oct 04 '22 05:10

Justin Breitfeller


Try another thread

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

...here all code

}});

. But by Android SDK source codes look like 4.0.2_r1

130  private CursorWindow(Parcel source) {
131 mStartPos = source.readInt();
132 mWindowPtr = nativeCreateFromParcel(source);
133 if (mWindowPtr == 0) {
134 throw new CursorWindowAllocationException("Cursor window could not be "
135 + "created from binder.");
136 }
137 mName = nativeGetName(mWindowPtr);
138 mCloseGuard.open("close");
139 }
where mWIndowPtr is Int
like image 27
Mertuarez Avatar answered Oct 04 '22 04:10

Mertuarez