mia attività contiene questo codice per ottenere tutte le immagini sulla scheda SD:in grado di riprendere l'errore di attività
String[] projection = {MediaStore.Images.Media._ID,
MediaStore.Images.Media.DATA,
MediaStore.Images.ImageColumns.DATA};
Cursor cursor = managedQuery(MediaStore.Images.Media.EXTERNAL_CONTENT_URI,
projection, null, null,
MediaStore.Images.Media._ID);
int count = cursor.getCount();
int image_path_index = cursor.getColumnIndex(MediaStore.Images.Media.DATA);
int i;
for(i = 0; i < count; i++) {
cursor.moveToPosition(i);
String p = cursor.getString(image_path_index);
fd.addToPhonePhoto(p);
}
cursor.close();
La verificato mentre l'attività stava riprendendo:
03-14 14:06: 48.380: E/AndroidRuntime (20793): java.lang.RuntimeException: impossibile riprendere l'attività {}: java.lang.RuntimeException: impossibile riprendere l'attività {}: android.database.StaleDataException: tentato di accedere a un cursore dopo che è stato chiuso.
Si verifica solo su Android 4.0. Se su Android 2.xo 3.x, funziona normalmente. Ma se cambio l'impostazione di sistema che seleziona l'opzione "non mantenere attività" in "Opzioni sviluppatore". L'errore non viene visualizzato.
Desidero modificare il mio codice per evitare questo errore senza modificare le impostazioni di sistema. Come dovrei farlo?
La tua risposta è giusta. Ma un'altra mia attività ha lo stesso errore. Il codice come questo http://stackoverflow.com/questions/9426170/why-the-cusor-null. Se non si chiama cursor.close(), il cousor otterrà null mentre esegue più loop. Come evitarlo? – brian
@brian Forse i problemi della tua altra domanda sono a causa delle dimensioni delle operazioni che fai. Fai una ricerca completa di MediaStore.Images.Media' per due colonne, e poi fai diverse centinaia (o anche più di 1000) 'managedQuery' per ottenere le anteprime (anche se vuoi la miniatura non devi interrogare il' MediaStore .Images.Thumbnails' contentprovider?). Inoltre dici che il cursore a volte è nullo, ma non chiamerei chiudi sul cursore per lanciare un 'NullPointerException'? – Luksprog
Ad esempio, ho 2000 foto. Il ciclo for da 1 a 1000 funziona ma più di 1000 diventeranno nulli. Se si utilizza NullPointerException, alcune foto potrebbero non essere aperte. – brian