2016-01-14 54 views
1

我嘗試了幾種方法,但總是返回'null'。BitmapFactory.decodeFile爲空

我想從相機文件夾讀取一個文件到一個位圖對象。

File camDir = new File(Environment.getExternalStorageDirectory().getAbsoluteFile() + "/DCIM/Camera"); 
    File[] files = camDir.listFiles(); 
    Bitmap img = BitmapFactory.decodeFile(files[1].getAbsolutePath()); 
    img.getDensity(); 

我的錯誤在哪裏?

+0

也許這是很長的,因爲圖像太大,你可以嘗試抓住並得到異常? –

+1

你假設'files [1]'將指向一個位圖。此外,只有您具有'READ_EXTERNAL_STORAGE',並且取決於您的設備操作系統版本和'targetSdkVersion',這纔會起作用,您可能需要在運行時向用戶請求該權限。 – CommonsWare

+0

爲什麼你不使用這個? :'File camDir = new File(Environment.getExternalStorageDirectory()+「/ DCIM/Camera」);' –

回答

1

如果您不知道null是什麼,您可以添加一個簡單的try()catch(Exception e),然後e.printstacktrace();以獲取該錯誤。

如果錯誤是關於outOfMemory試試這個answer;

此外,您可以嘗試這一招:

File camDir = new File(Environment.getExternalStorageDirectory().getAbsoluteFile() + "/DCIM/Camera"); 
File[] files = camDir.listFiles(); 
FileInputStream FI = new FileInputStream (files[1].getAbsolutePath()); 
Bitmap img = BitmapFactory.decodeStream(FI); 
img.getDensity(); 

另一種嘗試,我向你們提到的評論,你可以刪除getAbsolutePath()並做到這一點,如下所示:

File camDir = new File(Environment.getExternalStorageDirectory() + "/DCIM/Camera"); 
1

謝謝大家幫助!

我發現這個問題是 「getAbsolutePath()」 我不明白爲什麼,但它的工作原理..

我改變了這個:

File camDir = new File(Environment.getExternalStorageDirectory().getAbsoluteFile() + "/DCIM/Camera"); 

要:

File camDir = new File(Environment.getExternalStorageDirectory() + "/DCIM/Camera"); 

它的工作原理!

相關問題