Uno snippet per effettuare il download di una immagine da internet (da usare, ad esempio, come sorgente per una ImageView) con la gestione del caching dei file già scaricati e la possibilità di passare delle opzioni per la modifica della qualità delle immagini.
public static Bitmap downloadImage(String fileUrl, BitmapFactory.Options options, Context context){
Bitmap bmImg = null;
URL myFileUrl =null;
try {
myFileUrl= new URL(fileUrl);
} catch (MalformedURLException e) {
e.printStackTrace();
}
try {
String encodedfilename = Base64.encodeBytes(fileUrl.getBytes());
//Controllo presenza della cache
try {
InputStream check = context.openFileInput(encodedfilename);
} catch (FileNotFoundException e) {
// Se non presente, scarico il file
HttpURLConnection conn= (HttpURLConnection)myFileUrl.openConnection();
conn.setDoInput(true);
conn.connect();
InputStream is = conn.getInputStream();
//Salvataggio cache
FileOutputStream fos = context.openFileOutput(encodedfilename, Context.MODE_PRIVATE);
byte[] buffer = new byte[1024];
int len1 = 0;
while ( (len1 = is.read(buffer)) > 0 ) {
fos.write(buffer,0, len1);
}
fos.close();
}
bmImg = BitmapFactory.decodeStream(context.openFileInput(encodedfilename),null,options);
} catch (IOException e) {
e.printStackTrace();
}
return bmImg;
}
Un rapido esempio di utilizzo:
BitmapFactory.Options options=new BitmapFactory.Options(); //Setto la qualità dell'immagine options.inSampleSize = 8; imageView1.setImageBitmap(downloadImage(URL_IMMAGINE, options,getContext()));

Ciao Andy,
grazie per gli utilissimi tutorial.
Stavo utilizzando il tuo snippet per caricare delle imageview in modo asincrono, ma ho un problema con la chiamata Base64.encodeBytes(…).
Ricevo errore “Base64 cannot be resolved”, hai suggerimenti su come risolverlo?
Grazie
Pubblicato da Filippo | 21/09/2010, 11:59 am