12

私は現在、Androidアプリを大幅に変更/書き直しています.次の行に沿って非常に時折クラッシュするのを見てきました:CursorAdapterメソッドが呼び出され、それが呼び出されますAbstractWindowedCursor#checkPosition().

02-20 15:03:18.180 E/AndroidRuntime(17143): android.database.StaleDataException: Attempting to access a closed CursorWindow.Most probable cause: cursor is deactivated prior to calling this method.
02-20 15:03:18.180 E/AndroidRuntime(17143): at android.database.AbstractWindowedCursor.checkPosition(AbstractWindowedCursor.java:139)
02-20 15:03:18.180 E/AndroidRuntime(17143): at android.database.AbstractWindowedCursor.getLong(AbstractWindowedCursor.java:74)
02-20 15:03:18.180 E/AndroidRuntime(17143): at android.database.CursorWrapper.getLong(CursorWrapper.java:106)
02-20 15:03:18.180 E/AndroidRuntime(17143): at android.widget.CursorAdapter.getItemId(CursorAdapter.java:220)

問題は、s を閉じていないことですCursor。すべてCursorの は から来て、CursorLoaderによって生成されますContentProvider。からCursoreach それぞれにを渡し、for に通知を登録し、eachからに通知しています。要するに、使用中に a が閉じる理由が見つかりません。CursorAdapterLoaderCallbacksCursorContentProviderContentResolverinsert(...)delete(...)update(...)Cursor

だから:他の原因は何StaleDataExceptionですか?

4

2 に答える 2

-3

Context.managedQuery()Android 4.0 以降で呼び出した場合、呼び出してはいけません。呼び出したCursor.close()場合、StaleDataExceptionスローされます。次のようにコードを変更できます。

if(VERSION.SDK_INT < 14) {  
    cursor.close();  
}
于 2014-05-18T11:32:53.313 に答える