webentwicklung-frage-antwort-db.com.de

Öffnen einer Datei aus dem Asset-Ordner in Android

Ich habe eine .gif-Datei im Assets-Ordner wie diese Assets/Files/Android.gif. Wenn ich versuche, die Datei zu öffnen, wird in der zweiten Zeile eine Ausnahme ausgelöst 

AssetManager mngr=getAssets();
InputStream is2=mngr.open("Files/Android.gif");

ist es also so, dass ich versuche, eine Image-Datei zu öffnen, obwohl derselbe Code funktioniert, wenn ich versuche, eine Textdatei zu öffnen? Was kann das Problem sein?.

16
Mina Samy

Diese Linien funktionieren perfekt--

InputStream assetInStream=null;

try {
    assetInStream=getAssets().open("icon.png");
    Bitmap bit=BitmapFactory.decodeStream(assetInStream);
    img.setImageBitmap(bit);
} catch (IOException e) {
    e.printStackTrace();
} finally {
    if(assetInStream!=null)
    assetInStream.close();
}

Wenn Ihr Bild sehr groß ist, sollten Sie es skalieren, bevor Sie es in Bitmap decodieren. Siehe So zeigen Sie ein großes Bild effizient an

30
Tofeeq

Ich habe den Verdacht, dass Sie Beschwerden über nicht behandelte IOException-Typen erhalten. Wenn dies der Fall ist, müssen Sie den Aufruf von mgr.open in einen try-catch-Block setzen, um die Ausnahme zu behandeln, die beim Abrufen des InputStream-Objekts auftreten kann.

AssetManager mngr = getAssets();
try {
    InputStream is2 = mngr.open("Files/Android.gif");
} catch (final IOException e) {
    e.printStackTrace();
}
4
keno

Ich glaube, der bevorzugte Weg, dies zu tun, besteht darin, Ihr Image in das Verzeichnis res/drawable zu legen. Dann können Sie einen Drawable wie folgt erhalten:

Drawable d = Resources.getSystem().getDrawable(R.drawable.Android);
1
AdamC

Ich weiß nicht, ob sich Dinge geändert haben oder nicht, aber ich hatte eine App in Android 1.1, mit der Symbole geöffnet wurden, um sie in einer Ansicht anzuzeigen. Ich tat es so:

BufferedInputStream buf = new BufferedInputStream(mContext.openFileInput(value));
Bitmap bitmap = BitmapFactory.decodeStream(buf);
1
JRL

Ich glaube nicht, dass Gif auf Android automatisch unterstützt wird. Versuchen Sie ein PNG oder JPG mit dem gleichen Code.

0
Adam Freeman

Mina, ich hatte das gleiche Problem ... Ich hatte Bilder und eine XML-Datei innerhalb von "Assets" und ich konnte die XML-Datei lesen, aber nicht die Bilder. Nach ein paar Stunden Frustration fand ich endlich die Lösung!

Ich habe die Lösung hier veröffentlicht: Null-Zeiger-Problem, das ein Bild aus dem Assets-Ordner Android 2.2 SDK anzeigt

0