msgbartop
Desarrollador web y android, con todo lo que ello implica
msgbarbottom

11 Mar 10 Mostrar/cargar imagen externa en una aplicación Android

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

Etiquetas: , , , ,

Comentarios de los lectores

  1. |

    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.

  2. |

    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.

  3. |

    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

  4. |

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

  5. |

    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

  6. |

    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.

  7. |

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

Deje un comentario