¿Cómo puedo configurar una imagen a partir de una ruta de archivo?

Estoy guardando una imagen de la cámara del dispositivo en un directorio de la tarjeta SD (por ejemplo: /sdcard/appName/image.jpg), luego guardo la ruta en una base de datos. Mi problema es que parece que no puedo cargar las imágenes en un ListView con un adaptador de cursor.

Probé el siguiente código, donde helper.getImg(); es un método de mi ayudante de base de datos que devuelve un String (la ruta del archivo), pero no funciona.

icon=(ImageView)row.findViewById(R.id.icon_pura);
String imgPath=helper.getImg(c);
Bitmap myBitmap=BitmapFactory.decodeFile(imgPath);
icon.setImageBitmap(myBitmap);

preguntado el 08 de noviembre de 11 a las 17:11

3 Respuestas

la respuesta tiene que ver con los URI, y debe usar el externalstorage() función. El uso de rutas establecidas no funcionará en todos los dispositivos

de todos modos, almacena la ruta en el URI, que es más flexible para recuperar y analizar elementos en esa ruta

respondido 08 nov., 11:21

String filepath = Environment.getExternalStorageDirectory().getAbsolutePath()+"/Directory name/";
File file = new File(filepath,imagename);
FileInputStream fs = null;
try 
{
    fs = new FileInputStream(file);
} 
catch (FileNotFoundException e) {
// TODO Auto-generated catch block
    e.printStackTrace();
}

BitmapFactory.Options bfOptions = new BitmapFactory.Options();
            /*
             * bfOptions.inDither=false; //Disable Dithering mode
             * bfOptions.inPurgeable=true; //Tell to gc that whether it needs
             * free memory, the Bitmap can be cleared
             * bfOptions.inInputShareable=true;*/

bfOptions.inJustDecodeBounds = false;
bfOptions.inTempStorage = new byte[32 * 1024];
try {
    Bitmap originalImage = BitmapFactory.decodeFileDescriptor(fs.getFD(), null,bfOptions);
    icon.setImageBitmap(originalImage);
} catch (IOException e) {
// TODO Auto-generated catch block
                e.printStackTrace();
}

respondido 08 nov., 11:22

Si sigue el consejo de himanshu (correcto), asegúrese de que si le va a permitir al usuario la opción de cargar y volver a cargar la imagen, asegúrese de usar manualmente icon.setImageBitmap (null); entre cargas, porque de lo contrario, Android perderá esa memoria y bloqueará su aplicación. No es 100% consistente y tiene algo que ver con el tamaño de las imágenes que estás cargando, pero encontré esta fuga hace unos días y estoy 100% seguro de que está ahí.

respondido 08 nov., 11:22

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.