Mostrar/cargar imagen externa en una aplicación Android

marzo 11, 2010

Muchas veces nos encontramos con el problema de tener que cargar imagenes, que tenemos alojadas en un servidor externo, en nuestra aplicación Android. Las imágenes básicas las podemos incluir en la propia aplicación pero imágenes como, por ejemplo, los avatares de los usuarios los tenemos que cargar directamente desde el servidor.

Primero creamos el layout (main.xml):

1
2
3
4
5
6
7
8
9
10
11
<?xml version="1.0" encoding="utf-8" ?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"> 
 
 <ImageView android:id="@+id/image_view"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content" />
 
</LinearLayout>

Ahora creamos la activity que cargará la imagen del servidor y la mostrará en el layout anterior (Main.java):

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
package com.jonsegador.examples.externalimage;
import java.io.IOException;
import java.net.HttpURLConnection;
import java.net.URL;
import android.app.Activity;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.os.Bundle;
import android.widget.ImageView;
import android.widget.Toast;
 
public class Main extends Activity {
    private ImageView imageView;
    private Bitmap loadedImage;
    private String imageHttpAddress = "http://jonsegador.com/wp-content/apezz.png";            
 
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        imageView = (ImageView) findViewById(R.id.image_view);       
        downloadFile(imageHttpAddress);
    }
 
    void downloadFile(String imageHttpAddress) {
        URL imageUrl = null;
        try {
            imageUrl = new URL(imageHttpAddress);
            HttpURLConnection conn = (HttpURLConnection) imageUrl.openConnection();
            conn.connect();
            loadedImage = BitmapFactory.decodeStream(conn.getInputStream());
            imageView.setImageBitmap(loadedImage);
        } catch (IOException e) {
            Toast.makeText(getApplicationContext(), "Error cargando la imagen: "+e.getMessage(), Toast.LENGTH_LONG).show();
            e.printStackTrace();
        }
    }
}

Por último, incluimos la Activity en el AndroidManifest.xml y damos permisos para acceder a internet.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
      package="com.jonsegador.examples.externalimage"
      android:versionCode="1"
      android:versionName="1.0">
    <application android:icon="@drawable/icon" android:label="@string/app_name">
        <activity android:name=".Main" android:label="@string/app_name">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>    
    </application>
    <uses-sdk android:minSdkVersion="3" />  
    <uses-permission android:name="android.permission.INTERNET" />
</manifest>

Y este debería de ser el resultado:
imagen_externa_android

Tags ; , , , ,

20 comentarios

    Miguel Abr 28, 2010

    Amigo disculpa estube siguiendo tu manual de mostrar una imagen externa en android pero tengo algun problema y no me la muestra; no se si es mucha molestia si me puedes enviar tu codigo a mi mail : ———@hotmail.com te estaria muy agradecido.

    Responder
    daniel Mar 07, 2011

    main no se puede resolver o no es un campo, me da este error me podrias dar la solucion el tema es que copio el hola mundo y funciona bien.

    Responder
    Nogard May 01, 2011

    Ese codigo funciona de maravilla.
    He usado como emulador la version 2.3.3 de android y he sustituido por

    Muchas gracias por la info Jon Segador

    Responder
    Nogard May 01, 2011

    en uses-sdk android:minSdkVersion el 3 lo he sustituido por un 10

    Responder
    Patru May 04, 2011

    Hola antetodo gracias por el manual que va de maravilla y para los que nos estamos iniciando no es una ayuda perfecta. Mi duda es si quiero cargar en vez desde internet desde el propio telefono ruta /data/data… ¿como lo realizo? Creo que me estoy complicando demasiado porque lo realizo como si cargase ficheros XML pero no lo consigo, ¿alguna idea? Saludos y Gracias de antemano

    Responder
    Juan May 17, 2011

    Hola, está muy bien pero tengo la misma duda que Patru. Tengo una base de datos con palabras y lo que quiero lograr es otra base de datos con imágenes que esté en el móvil para poder vincularlas.

    Un saludo y gracias por estos tutoriales.

    Responder
    guduchango Sep 13, 2011

    Muy bueno viejo me anduvo 10ptos muy buen tuto cortito y directo saludos.

    Responder
    neza14 Mar 26, 2012

    Podrías poner una carga de imagen del directorio. Al apretar el botón selecciones la imagen que deseas mostrar

    Responder
    Pedro Abr 28, 2012

    Gracias, funciona de maravilla!!

    Responder
    Arnaldo Martinez Oct 04, 2012

    hola estaba intentado cargar una imagen normal y me funciona de maravilla, pero al momento de cargar una imagen flash tengo problema pork no logro subir esa imagen, le agradecería que explicara si es posible hacer esa parte, gracias

    Responder
    Gema Mar 14, 2013

    Efectivamente funciona de maravilla con el emulador versión 2.3.3 de Android.
    Pero para la versión 4.0.3 da un error al en esta línea

    HttpURLConnection conn = (HttpURLConnection) imageUrl.openConnection();
    conn.connect();

    Alguien sabe por qué? Gracias
    Un saludo

    Responder
      Jose Ene 28, 2016

      Sucede que las conexiones httpURL… requieren estar en un thread para operar de manera correcta , esto es un hilo separado del principal por lo que se puedan tardar.

      Responder
    ina Mar 29, 2013

    soy un novato pero el error creo que esta porque hay que usar un thread o el asyncTask para este tipo de procesos desde cierta version de android(2.4 o asi).

    Responder
    elena Abr 02, 2013

    Buenas, muchas gracias por el ejemplo, sale perfecto.
    Estoy intentado adaptar esto para poder descargar la imagen que tengo dentro de un JSONObject. La cosa es que hago una lista, y necesitaria sacar la imagen correspondiente a cada elemento de la lista,pero al usar un HashMap, no se como hacer para meter dentro la imagen… ¿me podrías ayudar? Muchas gracias.
    Un saludo

    Responder
      Oscar Nov 20, 2014

      Elena ¿conseguistes hacerlo? ¡yo tampoco se como hacerlo!
      Si seguistes algún tutorial ¿me podrías indicar cual?
      Un saludo

      Responder
    Liti May 21, 2013

    Muchísimas gracias por el ejemplo, funciona perfectamente.

    Responder
    Diego Jun 17, 2013

    Una consulta si quiero cambiar el tamaño de la imagen que se muestra como lo hago?

    Responder
    Ernesto Jun 17, 2013

    Hermano eres un man estoy comenzando en esto pero tu tuto esta genial a mi me funciono excelente

    Responder
    jeobel Sep 18, 2015

    y como se haría si en ves de estar aloajada en una URL(laimagen) estaria en un campo de BD de sqlserver si seconsumiera un web service con tipo de datos Image(de tipo ), en .net se hace en un instante pero en android-java ?

    Responder
    Jonathan Dic 17, 2015

    Funciona perfecto, muchas Gracias

    Responder

Escribe un comentario

Los comentarios son moderados y se utiliza rel="nofollow" para los enlaces.