2009-12-19 6 views
16

Ich habe eine GIF-Datei im Ordner Assets wie diese Assets/Dateien/android.gif. wenn ich versuche, die Datei zu öffnen es eine Ausnahme bei der zweiten Zeile wirftÖffnen einer Datei aus dem Ordner "Assets" in Android

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

so kommt es, dass ich versuche, trotz einer Image-Datei zu öffnen, dass der gleiche Code funktioniert, wenn ich versuche, eine Textdatei zu öffnen? was kann hier das Problem sein.

Antwort

30

Diese Linien arbeiten perfectly--

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, dann sollten Sie Ihr Bild skalieren, bevor es in Bitmap-Decodierung. See How to display large image efficiently

+3

AFIK-Stream sollte nach der Verwendung geschlossen werden – ruX

+0

@ruX: ja richtig hingewiesen Problem – Sameer

1

Sie wissen nicht, ob die Dinge geändert haben oder nicht, aber ich hatte eine App in Android 1.1, die Symbole geöffnet, um dann sie in einer Ansicht angezeigt werden und ich habe es in etwa so:

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

glaube ich, die bevorzugt So können Sie Ihr Bild in das Verzeichnis res/drawable bringen. Dann können Sie ein Drawable wie folgt erhalten:

Drawable d = Resources.getSystem().getDrawable(R.drawable.android); 
4

Ich vermute, dass Sie Beschwerden über unbehandelte Ausnahme Typ IOException bekommen. Wenn dies der Fall ist, müssen Sie den Aufruf in mgr.open in einem try-catch-Block ablegen, 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(); 
}