20
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)

..。

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

4

3 に答える 3

28

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

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
}

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

于 2013-01-23T16:07:31.713 に答える
1

別のスレッドを試す

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

...here all code

}});

. しかし、Android SDK のソースコードは 4.0.2_r1 のように見えます

130  プライベートCursorWindow(パーセルソース) { 
131 mStartPos = ソース。readInt ();
132 mWindowPtr = nativeCreateFromParcel (ソース);
133 if (mWindowPtr == 0) {
134 throw new CursorWindowAllocationException ("カーソル ウィンドウを"
135 + "バインダーから作成できませんでし た。");
136 }
137 mName = nativeGetName (mWindowPtr);
138 mCloseGuard.open("閉じる");
139 }
ここで、mWIndowPtrIntです

于 2013-01-23T22:04:01.153 に答える
-1

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

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

}

于 2013-01-23T15:55:45.190 に答える