2011-12-09 11 views
18

Quando chiamo questa funzione non c'è immagine nella vista immagine bitmapFactory.decodefile(filename) che mostra null .. per favore aiutatemi.Bitmap restituisce null da BitmapFactory.decodeFile (nome file)

Ecco il mio codice:

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

Invia lo stackTrace. – st0le

risposta

26

Ciao è null perché potrebbe essere la dimensione dell'immagine è grande e ottenere l'eccezione si prega di controllare il tuo log e vedere c'è qualche errore di bitmap outofmemory se sì quindi utilizzare le opzioni per quello:

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

E 'semplice: il file o non è un'immagine o un'immagine che non è supportato da implementazione Bitmap di Android, oppure è percorso non è valido.


vedere la documentazione per BitmapFactory.decodeFile(String file):

Returns
il bitmap decodificata risultante, o null se non poteva essere decodificato.


Di solito quando bitmap non può essere decodificato alcuni registri sono stampati a logcat. Ispezionali attentamente.

+0

"Di solito quando la bitmap non può essere decodificata alcuni log vengono stampati su logcat. Controllarli attentamente."questa frase chiave è mia, grazie :) – oguzhan

9

Perché stai facendo questo String imageInSD = "/ sdcard/UserImages /" + userImageName;

Penso che se si ottiene un file .png è presente poi basta,

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

NOTA: Controllate anche di avere un Android supportati file di immagine è presente in quella posizione ..

+1

Durante il caricamento delle immagini memorizzate nella cache da una memoria esterna, file.getAbsolutePath() ha risolto il problema per me, anche se getPath() era corretto. – scottyab

7

Provare ad aggiungere le autorizzazioni di accesso alla scheda SD READ_EXTERNAL_STORAGE e/o WRITE_EXTERNAL_STORAGE. Funziona per me.

5

Assicurarsi che nelle opzioni (BitmapFactory.Options) i InJustDecodeBounds è impostato per falso o altrimenti restituirà null. Questo può essere impostato su true quando si desidera solo che il file venga decodificato ma non è necessario ulteriormente nel codice. In questo modo non è necessario allocare memoria aggiuntiva. Vedi here per ulteriori spiegazioni.

0

mi mancava controllo di permesso fase di esecuzione al livello API maggiore di 16.

1

Il BitmapFactory.decodeFile() esegue prima l'intera immissione immagine in quel percorso esatto. Quando decodeFile() si esegue non c'è immagine. Quindi la bitmap restituisce null. Generalmente le immagini ad alto pixel richiedono un po 'di tempo in più per essere posizionate sul loro percorso. Quindi questa eccezione accade.

Controllare il null e provare a decodeFile.

Bitmap bitmap = null; 

while(bitmap == null) 
    bitmap = BitmapFactory.decodeFile(imageInSD); 
Problemi correlati