lunes, 4 de abril de 2016

Cargar imagen con Picasso en Android




Cargar imágenes de manera asíncrona con Picasso en Android


En la actualidad, una gran ventaja al momento de cargar información es mediante llamadas o tareas asíncronas "async task",  un programador web o de apps de cualquier plataforma independientemente del lenguaje de programación debería considerar este modo de consulta, llamadas en segunda plano sin esperar que toda la página recargue (postback), esta claro que por la parte web con un poco de javascript podemos utilizar ajax para obtener información de la capa de datos hacia la capa de presentación. Lo mismo sucede con las aplicaciones móviles, nos queda claro que una app puede ser muy valiosa consumiendo servicios REST desde distintas bases de datos y que mejor en segundo plano para tener una mejor experiencia de usuario UX.

En mis inicios como Android Developer(sigo aprendiendo) entre la versión 2.1 Eclair y 2.2 Froyo, con Eclipse, consumía datos con REST y luego de terminar esta carga recién se manipulaba el activity, con esto no quiero decir que aún no existiese los "threads" o métodos asíncronos. Aquí la foto de mi LGPecan que para ese tiempo personalmente era mi Galaxy S7 jjajaja a pesar que era de clase baja, con este probaba mis app's.



Cargar una imagen en esos tiempos no era tan complejo, bastaba con utilizar la clase HttpURLConnection, indicando la URL y el control de imagen donde lo cargarías, dentro de un Try-Catch, algo como esto:

URL imageUrl = null;
HttpURLConnection conn = null;

 try {

 imageUrl = new URL("http://pagina.com/foto.jpg");
 conn = (HttpURLConnection) imageUrl.openConnection();
 conn.connect();
 Bitmap imagen = BitmapFactory.decodeStream(conn.getInputStream());
 img.setImageBitmap(imagen);

 } catch (IOException e) {

 e.printStackTrace();
 }
Fuente: (https://leandrotemperoni.wordpress.com/2013/02/18/obtener-datos-de-una-pagina-web-en-java/)

Sin embargo, Google a partir de la versión 4.0 API 16 Ice Cream Sandwich decidió manejar de manera más eficiente utilizando cargas en segundo plano, con el fin de mejorar la UX:


No entraré en más detalle porque no es el fin del post, pero deberás implementar todos estos métodos para realizar tu carga en hilos.
  • doInBackground()
  • onPreExecute()
  • onProgressUpdate()
  • onPostExecute()
  • onCancelled()
Como se puede apreciar, hay muchas más lineas de código por implementar a partir de la v4, esto trajo como consecuencia crear API's para ello, Volley es una de ellas que permite la carga asíncrona y que seguro en un futuro post mencionaré con un ejemplo práctico, Picasso es una de las que me sorprendió, basta con una linea de código para cargar una imagen, impresionante!!!


Picasso.with(context).load("http://tuimagenaqui.png").into(imageView);
Fuente : http://square.github.io/picasso/

Además de agregar en tu Gradle lo siguiente:

compile 'com.mcxiaoke.volley:library:1.0.+'
Y en el Manifest.xml

<uses-permission android:name="android.permission.INTERNET" />
Bualáa

No hay comentarios:

Publicar un comentario