0 votos

Hola Ramon, lo primero gracias de antemano, por anteriores contestaciones. Bien puesta vez estoy echo un lio con esto veras: voy a intentarte explicar lo mejor que pueda.
Tengo creada una base de datos sqlite, donde tengo guarda la direccion o el path a una fotografia (ademas de otros campos), bien lo que hago es una consulta a la BD, de la respuesta obtengo el path y a su vez este path lo meto como Extras en un intent que lanza otra activity, hasta aqui todo bien.
Te aclaro que la fotografia en cuestion esta en la SD interna del dispositivo, dentro de un fichero creado por mi para esta app.
Esta es la ruta = file:///storage/emulated/0/Pictures/Fotos_Lugar/Lugar_20140930_142116.JPG

Ahora cuando intento convertir el fichero de este path en un bitmap es cuando me dice que nada de nada.

BitmapFactory.Options options = new BitmapFactory.Options();
options.inPreferredConfig = Config.ARGB_8888;
Bitmap imagen = BitmapFactory.decodeFile(path_de_la_ruta_donde_esta_la_foto, options);

En el degub me dice que la variable (imagen=null)

Estoy pensando que quizas sea que esta activity no forme parte del mismo contesto. Si fuera asi como podria pasarle el contesto? .Que metodo podria usar?, cualquier cosa que se te ocurra me vendria bien. Lo dicho muchas gracias. Un saludo.

preguntado por Alfonso Dic 22, 2014 en Android

1 Respuesta

0 votos
Mejor respuesta

Si estás trabajando sobre una clase que herede de Activity estás heredando de Context, con lo que no necesitas pasarle el context (si te quieres asegurar llama al método getApplicationContext() para obtener el Context de la aplicación).
Asegúrate estar recibiendo el path en el método decodeFile y que el fichero exista. También deberías obtener la ruta externa por algún método de Android, nunca a mano (imagínate que en un móvil no se llama una parte de la ruta “storage” sino “drive”, ya la ruta absoluta no sirve). Te escribo un ejemplo simple y funcional para hacer lo que necesitas:

String FICHERO = "Nombre_del_fichero.png";
File ruta = getExternalFilesDir(null);
File fichero = new File(ruta, FICHERO);
if (fichero.mkdirs()) {
	Bitmap myBitmap = BitmapFactory.decodeFile(fichero.getAbsolutePath());
}

 

respondido por Jarroba [Admin] Dic 22, 2014

Hola Ramon mil gracias por contestar tan pronto, entiendo lo que me dices, pero como te explico anteriormente yo tengo la ruta del fichero y el nombre todo junto en un string es este file:///storage/emulated/0/Pictures/Fotos_Lugar/Lugar_20140930_142116.JPG. Osea que el path le llega y el fichero existe, me lo devuelve una consulta a la DB:

Bitmap myBitmap = BitmapFactory.decodeFile(file:///storage/emulated/0/Pictures/Fotos_Lugar/Lugar_20140930_142116.JPG);

y el debug me dice que myBitmap es null;

Espero me entiendas.

Bien, te sirve el mismo ejemplo que te pasé antes.

Solo te queda comprobar que el fichero exista, que los medios extraibles estén disponibles y que la ruta sea correcta.

Hola Ramon, muchas gracias por tus respuetas, pongo aqui como lo he resuelto por si alguien mas le interesa:

// Recojo de los extras el String y lo paso a Uri
String fotoCaptura = extras.getString(“foto”);
Uri urifoto = Uri.parse(fotoCaptura);

Bitmap imagen = getBitmapFromUri (urifoto);

//Fuente: https://developer.android.com/guide/topics/providers/document-provider.html#open

private Bitmap getBitmapFromUri ( Uri uri ) throws IOException {
ParcelFileDescriptor parcelFileDescriptor =
getContentResolver (). openFileDescriptor ( uri , “r” );
FileDescriptor fileDescriptor = parcelFileDescriptor . getFileDescriptor ();
Bitmap image = BitmapFactory . decodeFileDescriptor ( fileDescriptor );
parcelFileDescriptor . close ();
return image ;
}

Espero que os sirva. Ramon otra vez mil GRACIAS. Un saludo.

No hay de qué Alfonso, ayudaremos siempre que podamos. Tu aportación será muy útil y de agradecer por muchos desarrolladores :)