entre Desarrolladores

Recibe ayuda de expertos

Registrate y pregunta

Es gratis y fácil

Recibe respuestas

Respuestas, votos y comentarios

Vota y selecciona respuestas

Recibe puntos, vota y da la solución

Pregunta

2votos

Android-Insertar imágenes de forma dinámica usando BD

Hola.

En una base de datos guardo los nombres de las imagenes (tipo string). Por ejemplo, valor guardado en la BD imagen1.jpg

Ahora mediante una adaptador intento plasmar en la pantalla las imagenes, recibiendo el nombre desde una consulta. Adjunto el código. No lanza ningun tipo de eror pero la imagen no se ve.

        String uri = "R.drawable."+nombreFoto;
        Log.e("Checking", "ImageGirdAdapter. uri: "+uri);
        int imageResource = mContext.getResources().getIdentifier(uri, null, packName);
        photo.setImageResource(imageResource);

En el log (etiqueta Cheking) aparece la dirección correcta. Por ejemplo:

02-16 13:26:01.129: E/Checking(5600): ImageGirdAdapter. uri: R.drawable.imagen1.jpg

Aguna idea?

gracias y u saludo.

1 Respuesta

1voto

white Puntos75880

intenta asi:

int imageResource = mContext.getResources().getIdentifier(
    nombreFoto,
    "drawable",
    getPackageName()
);

photo.setImageResource(imageResource);

0voto

egoitz_gonzalez comentado

Sí, eso también lo había probado y nada. Mediante el Log veo que contenido de imageResource es 0.

02-16 14:08:46.538: E/Checking(18484): ImageGirdAdapter. imageResource: 0

0voto

white comentado

No me fije que tenia extension tu cadena de texto, intenta asi:

if (nombreFoto.indexOf(".") > 0)
     nombreFoto = nombreFoto.substring(0, nombreFoto.lastIndexOf("."));

int imageResource = mContext.getResources().getIdentifier(
    nombreFoto,
    "drawable",
    getPackageName()
);

photo.setImageResource(imageResource);

0voto

egoitz_gonzalez comentado

Funciona perfecto. Pero no entiendo el por qué. Serías tan amable de explicármelo por favor?

Gracias.

0voto

white comentado

Sucede que hay una clase que guarda los recursos como integros, entonces si pones la extension, se dara por hecho que estas llamando a un campo "jpg" que no existe en esta clase:

esta es la estructura que se crea dinamicamente en interno:

 package com.entredesarrolladores.ejemplo;

 public static final class drawable {
        public static final int ic_launcher=0x7f020000;
        public static final int image_1=0x7f020001;
        public static final int image_2=0x7f020002;
    }

el mismo sistema lo usan otros frameworks, como Qt

saludos!

0voto

egoitz_gonzalez comentado

Muchas gracias por la explicación. No sabía eso. Deduzco que otra solución es guardar los nombres de las imágenes sin la extensión y me evitaría el if.

0voto

white comentado

Tal cual, si la imagen viene de los recursos, la extension esta demás.

me alegra se haya resuelto.

Por favor, accede o regístrate para responder a esta pregunta.

Otras Preguntas y Respuestas


...

Bienvenido a entre Desarrolladores, donde puedes realizar preguntas y recibir respuestas de otros miembros de la comunidad.

Conecta