Android Programmierung: Bild, das auf dem Handy liegt in einer ImageView anzeigen, wie?
Guten Abend, ich programmiere gerade an einer kleinen Android App und bin nun auf ein Problem gestoßen. Ich habe mit einer anderen Methode ein Bild auf das Handy geladen (in den privaten Ordner der App, daher kann ich nicht überprüfen, ob das Bild wirklich da ist. Sollte aber da sein, da ich ja sehen kann, wie viel Speicher die App benötigt... also das Bild ist vorhanden) Und nun möchte ich dieses Bild in der App in einer ImageView anzeigen lassen. Der Code, den ich dazu geschrieben habe sieht so aus:
public void bildZeigen(String picName){
try {
InputStream is = new BufferedInputStream(getActivity().openFileInput(picName));
BitmapFactory.Options options = new BitmapFactory.Options();
Bitmap b = BitmapFactory.decodeStream(is, null, options);
imageView.setImageBitmap(b);
is.close();
} catch (Exception e){
}
}
picName ist der Name des Bildes (z.B. bild.jpg) und wird von einer anderen Methode in Form eines Strings als Parameter übergeben. imageView wird weiter oben initialisiert. Was hier vielleicht noch gesagt werden muss ist, dass das ganze in einem Fragment stattfindet. Deswegen das getActivity()
Das Problem ist jetzt, dass BitmapFactory null zurückgibt, anstatt eines Bildes und somit kein Bild angezeigt wird.
Ich hoffe, das ist verständlich und mir kann hier jemand helfen. Wäre wirklich hilfreich, danke
mfg
4 Antworten
Hast du die Berechtigung gesetzt, dass die App auf das System zugreifen kann?
Du kannst nur Zugriffe innerhalb des Ordners für die App machen. Alles was außerhalb liegt, kannst du nicht nutzen. Ausnahme ist, du setzt die Berechtigung für Dateisystem-Zugriff.
das Bild liegt ja innerhalb des Ordners. An der selben Stelle, an der auch die .txt Dateien liegen, die ich auch auslesen kann.
bild1.setImageResource(R.drawable.bild2);
Hallo!
Ich arbeite auch mit Bilder/Images mit Android --
versuche mal das Bild in eine xml-Datei zu integrieren, ob es dann kommt?
Ausserdem würde ich mich an die Ordnerstruktur halten, also das Bild (png oder jpg) in den res/drawable-Ordner oder in die neuen res/mipmap-Ordner zu legen.
Gut funktioniert bei mir auch der assets-Ordner, da kannst du
getActivity().getAssets() nehmen, um das richtige Verzeichnis zu bekommen.
In der XML-Datei z.B.
android:scr="@drawable/postman"
Gruß
P.S --> in drawable und mipmap den Bildname ohne Extension angeben!
hey, danke für die Antwort, nur scheinst auch du leider meine Situation nicht ganz zu verstehen (hab wahrscheinlich zu ungenau formuliert)
das Bild ist NICHT in der App enthalten und wird erst später von dieser aus dem Internet heruntergeladen und dann in dem nur für die App zugänglichen Ordner auf dem internen Speicher abgelegt. Dass das Bild (bzw. die bilder) wirklich heruntergeladen werden, also in dem Ordner vorhanden sind, sehe ich daran, dass die App 10Mb Daten hat, die ich ja auch wieder löschen kann über die Android Einstellungen. Alle Bilder, die die App herunter läd, haben zusammen 10Mb.
Ich hoffe, dass es jetzt etwas klarer ist und mir jemand helfen kann.
BitmapFactory.decodeStream() löst ziemlich sicher eine Exception aus - die allerdings aufgrund von catch(Exception e) nicht zu einem Abbruch führt.
Mit folgender zusätzlicher Zeile wird der Text der Exception in LogCat ausgegeben woran man dann erkennen kann wodurch das Problem entsteht.
Noch einfacher wird es natürlich wenn man einen Breakpoint auf diese Zeile setzt und die App im Debugger ausführt.
} catch (Exception e){
Log.e("Image", e.toString());
}
Eventuelle Ursachen:
der Code der die jpg-Datei geschrieben hat hat eine fehlerhafte Jpg-Datei generiert.
das geschriebene jpg-Bild hat eine so hohe Auflösung das es in dieser Auflösung (als Bitmap!) zuviel Speicher braucht.
Aber das ist Stochern im Nebel....daher am besten den Debugger benutzen
welche wäre das? ich habe nichts gesetzt, aber .txt Dateien kann ich auch erfolgreich abspeichern und auch auslesen und anzeigen lassen