Attualmente sto pesantemente la modifica/riscrivere un'applicazione Android e ho visto un incidente molto occasionale secondo le seguenti linee: un metodo CursorAdapter
si chiama, si chiama AbstractWindowedCursor#checkPosition()
, e:Cosa può causare StaleDataException oltre a chiamare prematuramente 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)
Il problema è che noi Non stiamo chiudendo alcun Cursor
s. Tutti i nostri Cursor
s provengono da CursorLoader
s e a loro volta sono prodotti da un ContentProvider
. Stiamo passando il Cursor
in ogni rispettivo CursorAdapter
dal LoaderCallbacks
, stiamo registrando il Cursor
per le notifiche nella ContentProvider
, stiamo notificando il ContentResolver
da ogni insert(...)
, delete(...)
e update(...)
... insomma non posso trovare una ragione per cui un Cursor
si chiuderà mentre è in uso.
Quindi: quali sono le altre cause di un ?
E 'stato un po' che si chiesto, ma ... c'era un FilterQueryProvider coinvolto, per caso? –
Hey Andrew! Sei riuscito a capire la soluzione? – TheLittleNaruto