2009-12-19 5 views
16

Ho un file .gif all'interno della cartella delle risorse come questo assets/Files/android.gif. quando provo ad aprire il file viene generata un'eccezione alla seconda lineaApertura di un file dalla cartella delle risorse in Android

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

Quindi è che sto cercando di aprire un file immagine, nonostante che lo stesso codice funziona se provo ad aprire un file di testo? quale può essere il problema qui.

risposta

30

queste linee stanno lavorando 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(); 
} 

Se l'immagine è molto grande, allora si dovrebbe scalare l'immagine prima di decodifica in bitmap. See How to display large image efficiently

+3

AFIK stream deve essere chiuso dopo l'uso – ruX

+0

@ruX: sì problema corretto – Sameer

1

Non so se le cose sono cambiate o no, ma ho avuto un app in Android 1.1 che ha aperto le icone per poi visualizzare in una vista e l'ho fatto in questo modo:

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

Credo che il preferito il modo per farlo è mettere la tua immagine nella directory res/drawable. Quindi è possibile ottenere un Drawable come questo:

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

Ho il sospetto che si stiano lamentando sul tipo di eccezione IOException non gestito. In tal caso, è necessario mettere la chiamata a mgr.open in un blocco try-catch per gestire l'eccezione che può verificarsi quando si recupera l'oggetto InputStream.

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