2011-12-09 10 views
18

Podczas wywoływania tej funkcji nie ma obrazu w widoku obrazu bitmapFactory.decodefile(filename) wyświetlana wartość null. Proszę o pomoc.Bitmapa zwraca wartość null z pliku BitmapFactory.decodeFile (nazwa pliku)

Oto mój kod:

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

Opublikuj stackTrace. – st0le

Odpowiedz

26

Cześć, to jest null, ponieważ może to być rozmiar obrazu jest duży i jest wyjątek. Sprawdź swój dziennik i zobacz czy jest jakiś błąd mapy bitowej outofmemory, jeśli tak, użyj opcji:

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

To proste: albo plik nie jest obraz lub obraz, który nie jest obsługiwany przez realizację Bitmap Android, lub ścieżka jest nieprawidłowa.


Patrz dokumentacja BitmapFactory.decodeFile(String file):

Zwraca
otrzymany dekodowane bitmap lub null, jeśli nie mogą być dekodowane.


Zwykle, gdy bitmapy nie mogą być dekodowane niektóre dzienniki są drukowane na LogCat. Sprawdź je dokładnie.

+0

"Zazwyczaj, gdy bitmap nie może zostać zdekodowany, niektóre logi są drukowane na logcat."To zdanie kluczowe jest moje, dzięki :) – oguzhan

9

Dlaczego to robisz? String imageInSD = "/ sdcard/UserImages /" + userImageName;

myślę, że jeśli dostaniesz .png plik jest obecny tylko wtedy,

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

UWAGA: Sprawdź również masz Android obsługiwane plik obrazu jest obecny w tym miejscu ..

+1

Podczas ładowania obrazów z pamięci podręcznej z pamięci zewnętrznej, plik.getAbsolutePath() naprawił go dla mnie, mimo że getPath() był poprawny. – scottyab

7

Spróbuj dodać uprawnienia dostępu do karty SD READ_EXTERNAL_STORAGE i/lub WRITE_EXTERNAL_STORAGE. To działa dla mnie.

5

Pamiętaj, że w opcjach (BitmapFactory.Options) na InJustDecodeBounds jest ustawione na fałszywego lub w inny sposób zwróci wartość null. To może być ustawione na true, gdy chcesz tylko, aby plik został zdekodowany, ale nie potrzebujesz go dalej w swoim kodzie. W ten sposób nie trzeba przydzielać dodatkowej pamięci. Aby uzyskać więcej informacji, patrz here.

0

mi brakuje sprawdzanie uprawnień czasu prowadzony na poziomie API większa niż 16.

1

BitmapFactory.decodeFile() wykonuje przed wprowadzeniem całego obrazu w tym dokładną ścieżkę. Po wykonaniu decodeFile() nie ma obrazu. Tak więc bitmapa zwraca null. Zasadniczo obrazy o wysokiej rozdzielczości wymagają trochę więcej czasu, aby umieścić je na swojej ścieżce. Tak więc ten wyjątek się dzieje.

Proszę sprawdzić wartość pustą i spróbować zdekodować plik.

Bitmap bitmap = null; 

while(bitmap == null) 
    bitmap = BitmapFactory.decodeFile(imageInSD); 
Powiązane problemy