package com.merybere.app.services; import java.io.InputStream; import java.net.HttpURLConnection; import java.net.URL; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.os.AsyncTask; import android.widget.ImageView; // AsyncTask --> Tres tipos de datos extra: // Primero: tipo de dato que se recibe como par�metro en la llamada de la ejecuci�n (url en nuestro caso) // Segundo: progreso --> si la tarea dura, qu� hacer durante el progreso (ir incrementando una barra, mostrar un texto) // Tercero: lo que esa tarea va a devolver cuando acabe public class LoadImageAsyncTask extends AsyncTask<String, Void, Bitmap> { private ImageView imageView; // Hacemos el constructor: para poder interactuar necesitamos pasarle el objeto ImageView // donde queremos colocar la imagen (como par�metro) public LoadImageAsyncTask(ImageView imageView) { // guardar el image view this.imageView = imageView; } // Tarea pesada en segundo plano. Seg�n lo definido, va a devolver un bitmap, y se le manda una // lista de par�metros de tipo string (pueden ser 1, 0 � varios) @Override protected Bitmap doInBackground(String... params) { Bitmap bitmap = null; // Cadena de la url (de los par�metros que me pasan, el primero) String urlString = params[0]; try { // Convertir la string en una url URL url = new URL(urlString); // Apertura de una conexi�n HttpURLConnection connection = (HttpURLConnection) url.openConnection(); // Conectar connection.connect(); // Recibir el flujo de datos InputStream input = connection.getInputStream(); // A trav�s de una factor�a, convertir el flujo de datos en un bitmap bitmap = BitmapFactory.decodeStream(input); connection.disconnect(); } catch (Exception e) { bitmap = null; e.printStackTrace(); } return bitmap; } // Los siguientes m�todos se ejecutar�n en primer plano (en el hilo principal), // por tanto se puede interactuar con ellos: // M�todo que se llama cuando se haya ejecutado una tarea // Se le pasa un bitmap, que es lo que hemos definido que devuelve la tarea al acabar @Override protected void onPostExecute(Bitmap result) { super.onPostExecute(result); // asignar al imageView el bitmap, la imagen imageView.setImageBitmap(result); } // M�todo que se llama antes de ejecutar una tarea @Override protected void onPreExecute() { // Por si ya hubiera una imagen cargada, borrarla imageView.setImageBitmap(null); super.onPreExecute(); } // M�todo que se llama cuando se produzca un progreso // Como durante el progreso hemos definido que no se pasa nada, el par�metro es un void @Override protected void onProgressUpdate(Void... values) { super.onProgressUpdate(values); } }