Jestem obecnie w dużym stopniu modyfikowanie/przepisywanie aplikację na Androida i widziałem bardzo sporadyczne awarii wzdłuż następujących linii: metoda CursorAdapter
nazywa, wywołuje AbstractWindowedCursor#checkPosition()
oraz:Co może spowodować, że StaleDataException będzie inne niż przedwcześnie wywoływanie cursor.close()?
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)
Kłopot w tym, że "Nie zamykaj żadnego s. Cursor
. Wszystkie nasze Cursor
s pochodzą z CursorLoader
s, a z kolei są produkowane przez ContentProvider
. Jesteśmy przekazując Cursor
do każdego odpowiedniego CursorAdapter
z LoaderCallbacks
, jesteśmy rejestracji Cursor
powiadomień w ContentProvider
, jesteśmy powiadamianiaContentResolver
z każdej insert(...)
, delete(...)
i update(...)
... krótko mówiąc nie mogę znajdź jakikolwiek powód, dla którego Cursor
zostanie zamknięty podczas używania.
A więc: jakie są inne przyczyny dla StaleDataException
?
Minęło trochę czasu od ciebie zapytał, ale czy był tam jakiś przypadek FilterQueryProvider? –
Hej, Andrew! Czy byłeś w stanie znaleźć rozwiązanie? – TheLittleNaruto