Nicht in der Lage, um die Aktivität Fehler
Meine Tätigkeit, die diesen code enthält, um alle Bilder auf der SD-Karte:
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();
Die aufgetreten sind, während der Tätigkeit wurde die Wiederaufnahme:
03-14 14:06:48.380: E/AndroidRuntime(20793): java.lang.RuntimeException: Unable to resume activity {}: java.lang.RuntimeException: Unable to resume activity {}: android.Datenbank.StaleDataException: Versuchter Zugriff auf einen cursor, nachdem es geschlossen wurde.
Es tritt nur auf Android 4.0. Wenn Sie auf Android 2.x oder 3.x, funktioniert es normal. Aber wenn ich die system-Einstellung wählt die "don' T keep Activities" - option in "Entwickler-Optionen".
Den Fehler nicht zeigen.
Möchte ich ändern mein code um diesen Fehler zu vermeiden, ohne eine änderung des Systems einstellen. Wie sollte ich es tun?
InformationsquelleAutor brian | 2012-03-14
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich denke, dies ist aufgrund der
managedQuery
rufen Sie + Sie schließen Sie den cursor. Aus den docs von dermanagedQuery()
Methode:Lassen Sie den cursor für das Android-system zu verwalten und rufen Sie nicht
cursor.close();
.Note:
DiemanagedQuery
Methode ist veraltet und es sollte vermieden werden,, implementierenCursorLoaders
statt. Mehr Infos überCursorLoaders
finden Sie unterdeveloper.android.com
.Vielleicht sind die Probleme von deiner anderen Frage wegen der Größe der Operationen, die Sie tun. Sie führen Sie eine vollständige Abfrage der MediaStore.Bilder.Medien " für zwei Spalten, und dann machen mehrere Hunderte(oder sogar 1000)
managedQuery
um die thumbnails(auch wenn Sie wollen, dass die Miniaturansicht sollten Sie nicht die Abfrage derMediaStore.Images.Thumbnails
contentprovider?). Auch Sie sagen, dass der cursor manchmal null, würde aber nicht dem Aufruf schließen auf den cursor werfenNullPointerException
?Zum Beispiel habe ich 2000 Fotos. Die for-Schleife von 1 bis 1000 Werke, aber mehr dann 1000 bekommen null. Wenn die Verwendung NullPointerException verursachen mehrere Foto nicht öffnen.
Ich weiß nicht, warum das passiert. Vielleicht könnten Sie versuchen, einen neuen Ansatz und vermeiden das Problem.
OK, reduzieren Sie den cursor aufrufen, scheint die einzige Methode. Trotzdem danke.
InformationsquelleAutor Luksprog
entfernen
cursor.close();
im codees funktionieren definitiv
InformationsquelleAutor Manish Godhani
Funktion, managedQuery() ist veraltet.
Nutzen Sie bitte getContentResolver().query().
Der Parameter ist die gleiche.
InformationsquelleAutor Nithin Raja