Cargando imágenes remotas

En Android, ¿cuál es el enfoque más sencillo de lo siguiente:

  1. Cargar una imagen desde un servidor remoto.
  2. Mostrarlo en un ImageView.

Aquí está un método que utilicé realmente en una aplicación y sé que trabaja:

try { URL thumb_u = new URL("http://www.example.com/image.jpg"); Drawable thumb_d = Drawable.createFromStream(thumb_u.openStream(), "src"); myImageView.setImageDrawable(thumb_d); } catch (Exception e) { // handle it } 

No tengo ni idea de cuál es el segundo parámetro a Drawable.createFromStream , pero pasar "src" parece funcionar. Si alguien sabe, por favor arroja algo de luz, ya que los docs realmente no dicen nada al respecto.

La forma más fácil hasta ahora es construir una imagen simple retriver:

 public Bitmap getRemoteImage(final URL aURL) { try { final URLConnection conn = aURL.openConnection(); conn.connect(); final BufferedInputStream bis = new BufferedInputStream(conn.getInputStream()); final Bitmap bm = BitmapFactory.decodeStream(bis); bis.close(); return bm; } catch (IOException e) {} return null; } 

A continuación, sólo tiene que proporcionar una dirección URL al método y se devuelve un Bitmap . Entonces, sólo tendrá que usar el método setImageBitmap de ImageView para mostrar la imagen.

Tenga cuidado con ambas de las respuestas aquí – ambos corren la posibilidad de una OutOfMemoryException . Pruebe su aplicación intentando descargar una imagen grande, como un fondo de escritorio. Para ser claros, las líneas ofensivas son:

final Bitmap bm = BitmapFactory.decodeStream(bis);

y

Drawable thumb_d = Drawable.createFromStream(thumb_u.openStream(), "src");

La respuesta de Félix la atrapará en la declaración de catch, y podrías hacer algo al respecto.

Aquí es cómo OutOfMemoryException error OutOfMemoryException :

  BitmapFactory.Options options = new BitmapFactory.Options(); options.inSampleSize = 8; Bitmap bmp = null; try { bmp = BitmapFactory.decodeStream(is, null, options); } catch (OutOfMemoryError ome) { // TODO - return default image or put this in a loop, // and continue increasing the inSampleSize until we don't // run out of memory } 

Y aquí están mis comentarios sobre esto en mi código

 /** * Showing a full-resolution preview is a fast-track to an * OutOfMemoryException. Therefore, we downsample the preview image. Android * docs recommend using a power of 2 to downsample * * @see <a * href="https://stackoverflow.com/questions/477572/android-strange-out-of-memory-issue/823966#823966">StackOverflow * post discussing OutOfMemoryException</a> * @see <a * href="http://developer.android.com/reference/android/graphics/BitmapFactory.Options.html#inSampleSize">Android * docs explaining BitmapFactory.Options#inSampleSize</a> * */ 

Enlaces desde comentarios anteriores: Link 1 Link 2

También puedes probar esta lib: https://github.com/codingfingers/fastimage

Cuando teníamos pocos proyectos con el mismo patrón, y el lib surgió;) entonces por qué no compartir con otros …

  • Cómo deshabilitar el colapso de un ExpandableListView?
  • Ver los valores devueltos getHeight () y getWidth () demasiado grandes
  • SurfaceView en ScrollView en 4.1
  • Expanda todos los niños en la vista de lista expandible
  • Lista extensible de Multichild android
  • Animación de la traducción y ampliación de la vista en Android
  • Cómo hacer un Scroll Listener para WebView en Android
  • Dibujo fuera de pantalla WebView a mapa de bits
  • ¿Qué pasa con setScaleX / setScaleY?
  • ¿Cómo puedo ocultar completamente el groupIndicator de un ExpandableListView?
  • Cómo reproducir video en VideoView dentro de ViewPager desde el servidor
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.