Cargando imágenes remotas
En Android, ¿cuál es el enfoque más sencillo de lo siguiente:
- Cargar una imagen desde un servidor remoto.
- Mostrarlo en un ImageView.
- Desarrollo de Android: ¿Cómo puedo hacer un texto de edición sencilla por lo que es sólo un cuadrado blanco?
- Cómo puede utilizar valores de cadena de preferencias compartidas en la clase de vista de superficie en Android
- ExpandableListView no aparece cuando se inicia la actividad
- Widgets de Android: Cómo agregar vistas a RemoteViews en tiempo de ejecución
- Establecer el ancho y la altura de la imagen en ImageView
- Agregando un niño en un GestureOverlayView en el punto donde toqué en android?
- ¿Cómo crear una vista personalizada simple?
- ExpandableListView onExpand siempre desplaza el grupo expandido hacia arriba
- Android LongClickListener en los elementos del grupo ExpandableListView
- Android Studio 2.2.0.12 diseñador automáticamente anuncios "@ + id" prefijo antes de la identificación de la vista y que causa este error inusual
- Cargar HTML estático en Webview
- ¿Es posible cambiar el navegador / motor predeterminado para la vista Web de Android?
- Manejar url desde la vista web onCreateWindow
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 …
- Emulador de Android no se inicia en MacOS 10.10
- Eclipse Android: No se pudo abrir el puerto de depuración de VM seleccionado (8700)