Android-Fehler: java.lang.IllegalStateException: Es wird versucht, einen bereits geschlossenen Cursor erneut abzufragen

Umgebung (Linux - /Eclipse-Dev für das Xoom-Tablet mit HoneyComb 3.0.1)

In meiner app bin ich mit der Kamera (startIntentForResult()) ein Bild zu machen. Nach der Aufnahme bekomme ich die onActivityResult() callback und bin laden können Sie eine Bitmap mit einer Uri übergeben, die über die "Bild" - Vorsatz. An diesem Punkt meiner Tätigkeit wieder aufgenommen wird und ich bekomme eine Fehlermeldung, die versuchen, um neu zu laden der Bilder in einer Galerie:

FATAL EXCEPTION: main
ERROR/AndroidRuntime(4148): java.lang.RuntimeException: Unable to resume activity {...}: 
 java.lang.IllegalStateException: trying to requery an already closed cursor
     at android.app.ActivityThread.handleResumeActivity(ActivityThread.java:2243)
     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1019)
     at android.os.Handler.dispatchMessage(Handler.java:99)
     at android.os.Looper.loop(Looper.java:126)
     at android.app.ActivityThread.main(ActivityThread.java:3997)
     at java.lang.reflect.Method.invokeNative(Native Method)
     at java.lang.reflect.Method.invoke(Method.java:491)
     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:841)
     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:599)
     at dalvik.system.NativeStart.main(Native Method)
 Caused by: java.lang.IllegalStateException: trying to requery an already closed cursor
     at android.app.Activity.performRestart(Activity.java:4337)
     at android.app.Activity.performResume(Activity.java:4360)
     at android.app.ActivityThread.performResumeActivity(ActivityThread.java:2205)
     ... 10 more

Nur die cursor-Logik, die ich verwende, ist, dass, nachdem das Bild aufgenommen ich umwandeln der Uri zu einer Datei mit der folgenden Logik

String [] projection = {
    MediaStore.Images.Media._ID, 
    MediaStore.Images.ImageColumns.ORIENTATION,
    MediaStore.Images.Media.DATA 
};

Cursor cursor = activity.managedQuery( 
        uri,
        projection,  //Which columns to return
        null,        //WHERE clause; which rows to return (all rows)
        null,        //WHERE clause selection arguments (none)
        null);       //Order-by clause (ascending by name)

int fileColumnIndex = cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA);
if (cursor.moveToFirst()) {
    return new File(cursor.getString(fileColumnIndex));
}
return null;

Irgendwelche Ideen was ich falsch mache?

InformationsquelleAutor der Frage cyber-monk | 2011-05-06

Schreibe einen Kommentar