2011-12-09 3 views
18

Cuando estoy llamando a esta función no hay imagen en la vista de imagen bitmapFactory.decodefile(filename) que muestra nulo .. ayuda para esto.Bitmap está devolviendo null desde BitmapFactory.decodeFile (nombre de archivo)

Aquí está mi código:

public Bitmap ShowImage(String imageName,String userImageName) 
{ 

    File sdcard_mainDirectory = new File(Environment.getExternalStorageDirectory(),"UserImages").getAbsoluteFile(); 

    File file = new File(sdcard_mainDirectory, userImageName).getAbsoluteFile(); 

    if (file != null) { 

     try { 

      String imageInSD = "/sdcard/UserImages/"+userImageName; 

      Bitmap bitmap = BitmapFactory.decodeFile(imageInSD); 

      return bitmap; 

     } 
     catch (Exception e) { 

      e.printStackTrace(); 
     } 

    } 

    return null; 

} 
+0

Coloque el stackTrace. – st0le

Respuesta

26

Hola, es null porque puede ser que el tamaño de la imagen sea grande y obteniendo una excepción, compruebe su registro y vea si hay algún error de outofmemory bitmap si es así, utilice las opciones para eso:

BitmapFactory.Options options; 

try { 
    String imageInSD = "/sdcard/UserImages/" + userImageName; 
    Bitmap bitmap = BitmapFactory.decodeFile(imageInSD); 
    return bitmap; 
} catch (OutOfMemoryError e) { 
    try { 
    options = new BitmapFactory.Options(); 
    options.inSampleSize = 2; 
    Bitmap bitmap = BitmapFactory.decodeFile(imageInSD, null, options); 
    return bitmap; 
    } catch(Exception e) { 
    Log.e(e); 
    } 
} 
4

Es muy sencillo: el archivo o bien no es una imagen o una imagen que no es compatible con la aplicación de mapa de bits de Android, o ruta no es válida.


Véase la documentación para BitmapFactory.decodeFile(String file):

devoluciones
el mapa de bits decodificado resultante, o null si no se ha podido descodificar.


lo general, cuando mapa de bits no puede ser decodificada algunos registros se imprimen a Logcat. Inspeccione con cuidado.

+0

"Generalmente, cuando el mapa de bits no se puede decodificar, algunos registros se imprimen en logcat. Inspeccione con cuidado."esta oración clave es mía, gracias :) – oguzhan

9

¿Por qué haces esto Cadena imageInSD = "/ sdcard/UserImages /" + userImageName;

Creo que si se obtiene un archivo .png está presente, entonces simplemente,

Bitmap bitmap = BitmapFactory.decodeFile(file.getAbsolutePath()); 

NOTA: También puedes ver que tiene un Android compatibles archivo de imagen está presente en ese lugar ..

+1

Al cargar imágenes en caché del almacenamiento externo, file.getAbsolutePath() me lo arregló, aunque getPath() era correcto. – scottyab

7

Intente agregar permisos de acceso a la tarjeta SD READ_EXTERNAL_STORAGE y/o WRITE_EXTERNAL_STORAGE. Funciona para mí.

5

Asegúrese de que en sus opciones (BitmapFactory.Options) los InJustDecodeBounds se establece en falsa o de lo contrario se devolverá un valor nulo. Esto se puede configurar como verdadero cuando solo desea que se decodifique el archivo, pero no lo necesita más en su código. De esta forma, no es necesario asignar memoria adicional. Ver here para más explicaciones.

0

me faltaba comprobación de permisos tiempo de ejecución en el nivel API superior a 16.

1

El BitmapFactory.decodeFile() ejecuta antes de que toda la colocación imagen en ese camino exacto. Cuando se ejecuta decodeFile(), no hay imagen. Entonces, el mapa de bits devuelve null. En general, las imágenes de alto píxel tardan algo de tiempo en colocarse en su camino. Entonces esta excepción sucede.

Compruebe el valor nulo y trate de decodificar el archivo.

Bitmap bitmap = null; 

while(bitmap == null) 
    bitmap = BitmapFactory.decodeFile(imageInSD); 
Cuestiones relacionadas