10

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 ?

+0

E 'stato un po' che si chiesto, ma ... c'era un FilterQueryProvider coinvolto, per caso? –

+1

Hey Andrew! Sei riuscito a capire la soluzione? – TheLittleNaruto

risposta

-2

se si chiama Context.managedQuery() in Android 4.0 e versioni successive, non si dovrebbe chiamare Cursor.close(), se lo fate, saranno gettati StaleDataException, è possibile modificare il vostro codice come segue:

if(VERSION.SDK_INT < 14) { 
    cursor.close(); 
} 
Problemi correlati