AsyncTask per il download di un'immagine in Android
Come scaricare da remoto e visualizzare un'immagine all'interno di una Activity Android.
Le immagini rappresentano uno degli elementi chiave di molte Activity. Se pensiamo ad esempio ad un file XML remoto, che presenta all'interno una serie di informazioni, noi sappiamo già come si effettua il parsing e la relativa visualizzazione dei dati all'interno dei layout. Lo abbiamo visto in dettaglio nel WEBCAMP Android sulla progettazione di un'app per la lettura di news. Nel caso di dati stringa, non ci sono particolari problematiche, in quanto basterà inserirle all'interno di un TextView, mentre nel caso di immagini, è necessario scaricare e decodificare l'immagine bitmap, per poterla poi "iniettare" all'interno di un ImageView.
Il processo di download e di iniezione dell'immagine, non potrà essere eseguito nel'Activity principale, ma dovremo usare un AsyncTask, o una delle tante librerie online per il caricamento di immagini da remoto come Picasso o Glide.
Qui sotto un possibile esempio. Ricorda che per accedere alla rete per il download, devi avere settato i permessi corretti nel file manifest (android.permission.INTERNET)
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context="creareapp.com.asynctask.MainActivity">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/testo"
android:text="Esempio di immagine caricata da URL remoto!" />
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginEnd="11dp"
android:layout_marginTop="43dp"
android:id="@+id/immagineRemota" />
</RelativeLayout>
Il layout qui sopra non ha bisogno di spiegazioni. Dovremo solo ricordarci l'id associato a ImageView (immagineRemota).
public class MainActivity extends Activity {
private ImageView ivBasicImage;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
ivBasicImage = (ImageView) findViewById(R.id.immagineRemota);
// definisco manualmente la stringa url, da dove recuperare l'immagine
String url = "http://www.corsoandroid.it/images/testasyncimage.jpg";
// Scarico l'immagine da mostrare
new imageDownload(ivBasicImage).execute(url);
}
// Definisco l'AsyncTask che scaricherà l'immagine e la visualizzera nell' ImageView
private class imageDownload extends AsyncTask<String, Void, Bitmap> {
ImageView imageView;
public imageDownload(ImageView imageView) {
this.imageView = imageView;
}
protected Bitmap doInBackground(String... addresses) {
Bitmap bitmap = null;
InputStream in = null;
try {
// 1. Recupero e definisco l'url da richiamare
URL url = new URL(addresses[0]);
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
// 2. Apro la connessione
conn.connect();
in = conn.getInputStream();
// 3. Download e decodifico l'immagine bitmap
bitmap = BitmapFactory.decodeStream(in);
} catch (IOException e) {
e.printStackTrace();
}
return bitmap;
}
@Override
protected void onPostExecute(Bitmap result) {
imageView.setImageBitmap(result);
}
}
}
2026-05-19 Tipo/Autore: Davide Copelli {ing} Pubblicato da: CorsoAndroid.it