Android: scaricare immagini dal web (con gestione del caching)
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.
Un rapido esempio di utilizzo:
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()));