Zunächst möchte ich darauf hinweisen, dass diese Fragen etwas mit folgenden Themen zu tun haben weitere Frage von mir. Eigentlich ist es deswegen entstanden.
Ich habe den folgenden Code, um eine aus dem Netz heruntergeladene Bitmap in eine Datei auf der SD-Karte zu schreiben:
// Get image from url
URL u = new URL(url);
HttpGet httpRequest = new HttpGet(u.toURI());
HttpClient httpclient = new DefaultHttpClient();
HttpResponse response = (HttpResponse) httpclient.execute(httpRequest);
HttpEntity entity = response.getEntity();
BufferedHttpEntity bufHttpEntity = new BufferedHttpEntity(entity);
InputStream instream = bufHttpEntity.getContent();
Bitmap bmImg = BitmapFactory.decodeStream(instream);
instream.close();
// Write image to a file in sd card
File posterFile = new File(Environment.getExternalStorageDirectory().getAbsolutePath()+"/Android/data/com.myapp/files/image.jpg");
posterFile.createNewFile();
BufferedOutputStream out = new BufferedOutputStream(new FileOutputStream(posterFile));
Bitmap mutable = Bitmap.createScaledBitmap(bmImg,bmImg.getWidth(),bmImg.getHeight(),true);
mutable.compress(Bitmap.CompressFormat.JPEG, 100, out);
out.flush();
out.close();
// Launch default viewer for the file
Intent intent = new Intent();
intent.setAction(android.content.Intent.ACTION_VIEW);
intent.setDataAndType(Uri.parse(posterFile.getAbsolutePath()),"image/*");
((Activity) getContext()).startActivity(intent);
Ein paar Anmerkungen. Ich erstelle die "veränderbare" Bitmap, nachdem ich gesehen habe, dass jemand sie verwendet und es scheint besser zu funktionieren als ohne sie. Und ich bin mit der Parse-Methode auf die Uri-Klasse und nicht die fromFile, weil in meinem Code ich diese an verschiedenen Stellen aufrufen und wenn ich die Absicht, ich habe einen String-Pfad anstelle einer Datei erstellen.
Nun zu meinem Problem. Die Datei wird erstellt. Der Intent startet ein Dialogfeld, in dem ich aufgefordert werde, einen Viewer auszuwählen. Ich habe 3 Betrachter installiert. Der Astro Bildbetrachter, die Standard-Mediengalerie (ich habe einen Milstone auf 2.1, aber auf dem Milestone hat das 2.1-Update nicht die 3D-Galerie enthalten, so dass es die alte ist) und die 3D-Galerie aus dem Nexus ein (ich fand die apk in der Wildnis).
Wenn ich jetzt die 3 Viewer starte, passiert folgendes:
-
Astro-Bildbetrachter: Die Aktivität wird gestartet, aber ich sehe nichts außer einem schwarzen Bildschirm.
-
Mediengalerie: Ich erhalte eine Ausnahme Dialog angezeigt "Die Anwendung Media Gallery (Prozess com.motorola.gallery) wurde angehalten unerwartet gestoppt. Bitte versuchen Sie es erneut" mit einer Option zum erzwungenen Schließen.
-
3D-Galerie: Alles funktioniert wie es soll sollte.
Wenn ich versuche, die Datei einfach mit dem Astro-Dateimanager zu öffnen (durchsuchen und einfach anklicken), erhalte ich denselben Optionsdialog, aber dieses Mal ist es anders:
-
Astro-Bildbetrachter: Alles funktioniert wie es sollte.
-
Mediengalerie: Alles funktioniert wie es soll sollte.
-
3D-Galerie: Die Aktivität wird gestartet, aber ich sehe nichts als einen schwarzen Bildschirm.
Wie Sie sehen können, ist alles ein völliges Durcheinander. Ich habe keine Ahnung, warum das passiert, aber es passiert jedes Mal auf diese Weise. Es ist kein zufälliger Fehler.
Übersehe ich etwas, wenn ich die Absichtserklärung erstelle? Oder wenn ich die Bilddatei erstelle? Irgendwelche Ideen?
EDITAR: Wie in dem Kommentar erwähnt, ist hier der Teil von Interesse in adb logcat. Außerdem sollte ich erwähnen, dass ich die Art und Weise, wie ich die Image-Datei erstelle, geändert habe. Da ich eine Datei erstellen möchte, die eine Online-Datei widerspiegelt, lade ich sie einfach herunter, anstatt eine Bitmap zu erstellen und dann die Datei zu erstellen (dies wurde getan, weil ich irgendwann die Bitmap brauchte, aber jetzt mache ich es andersherum). die Probleme bleiben bestehen und sind genau die gleichen:
I/ActivityManager(18852): Start von Aktivität: Intent { act=Android.intent.action.VIEW dat=/sdcard/Android/data/com.myapp/files/image.jpg typ=Bild/* flg=0x3800000 cmp=com.motorola.gallery/.ViewImage }
I/ActivityManager(18852): Start proc com.motorola.gallery:ViewImage für Aktivität com.motorola.gallery/.ViewImage: pid=29187 uid=10017 gids={3003, 1015}
I/dalvikvm(29187): Debugger-Thread nicht aktiv, ignoriert DDM-Sendung (t=0x41504e4d l=38)
I/dalvikvm(29187): Debugger-Thread nicht aktiv, ignoriert DDM-Sendung (t=0x41504e4d l=64)
I/ActivityManager(18852): Prozess com.handcent.nextsms (pid 29174) ist gestorben.
I/ViewImage(29187): In View Image onCreate!
D/AndroidRuntime(29187): Herunterfahren VM
W/dalvikvm(29187): threadid=3: thread Beendet mit nicht gefangener Ausnahme (group=0x4001b170)
E/AndroidRuntime(29187): Uncaught handler: Thread main beendet sich aufgrund einer nicht gefangenen Ausnahme
E/AndroidRuntime(29187): java.lang.RuntimeException: Unable to Aktivität starten ComponentInfo{com.motorola.gallery/com.motorola.gallery.ViewImage}: java.lang.NullPointerException
E/AndroidRuntime(29187): at Android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2496)
E/AndroidRuntime(29187): bei Android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2512)
E/AndroidRuntime(29187): bei Android.app.ActivityThread.access$2200(ActivityThread.java:119)
E/AndroidRuntime(29187): bei Android.app.ActivityThread$H.handleMessage(ActivityThread.java:1863)
E/AndroidRuntime(29187): bei Android.os.Handler.dispatchMessage(Handler.java:99)
E/AndroidRuntime(29187): at Android.os.Looper.loop(Looper.java:123)
E/AndroidRuntime(29187): bei Android.app.ActivityThread.main(ActivityThread.java:4363)
E/AndroidRuntime(29187): at java.lang.reflect.Method.invokeNative(Native Methode)
E/AndroidRuntime(29187): at java.lang.reflect.Method.invoke(Method.java:521)
E/AndroidRuntime(29187): at com.Android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:860)
E/AndroidRuntime(29187): bei com.Android.internal.os.ZygoteInit.main(ZygoteInit.java:618)
E/AndroidRuntime(29187): bei dalvik.system.NativeStart.main(Native Methode)
E/AndroidRuntime(29187): Caused by: java.lang.NullPointerException
E/AndroidRuntime(29187): bei com.motorola.gallery.ImageManager.allImages(ImageManager.java:5621)
E/AndroidRuntime(29187): at com.motorola.gallery.ImageManager.getSingleImageListByUri(ImageManager.java:5515)
E/AndroidRuntime(29187): at com.motorola.gallery.ViewImage.onCreate(ViewImage.java:1801)
E/AndroidRuntime(29187): bei Android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
E/AndroidRuntime(29187): at Android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2459)
E/AndroidRuntime(29187): ... 11 mehr