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:
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.
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.
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
en uses-sdk android:minSdkVersion el 3 lo he sustituido por un 10
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
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.
Muy bueno viejo me anduvo 10ptos muy buen tuto cortito y directo saludos.
Podrías poner una carga de imagen del directorio. Al apretar el botón selecciones la imagen que deseas mostrar
Gracias, funciona de maravilla!!
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
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
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.
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).
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
Elena ¿conseguistes hacerlo? ¡yo tampoco se como hacerlo!
Si seguistes algún tutorial ¿me podrías indicar cual?
Un saludo
Muchísimas gracias por el ejemplo, funciona perfectamente.
Una consulta si quiero cambiar el tamaño de la imagen que se muestra como lo hago?
Hermano eres un man estoy comenzando en esto pero tu tuto esta genial a mi me funciono excelente
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 ?
Funciona perfecto, muchas Gracias