2013-12-12 55 views
2

我想調試我在我的應用程序中遇到的問題。問題是getExternalFiles(dir)在我的android應用程序中返回null,但我不知道爲什麼。我有必要的權限。這是一個存在於多個設備和Android版本(2.3.5及更高版本)上的錯誤。讓我知道你是否需要更多信息。context.getExternalFilesDir(null)爲空

的代碼這是問題的行是:

路徑= context.getExternalFilesDir(空)+ 「/database/mydata.db」;

路徑= context.getFilesDir()getAbsolutePath()+ 「/database/mydata.db」。

謝謝。

+0

@Tarsem,我有專門的檢查,但由於這是專有代碼,我猶豫張貼太多。 – dlucci

+0

@KenWolf,確切的錯誤是IllegalStateException:文件null /數據庫/ mydata.db – dlucci

+1

根據文檔,如果外部存儲沒有安裝,這將返回null。你確定它被安裝? 「如果外部存儲器當前未安裝,則返回null,因此無法確保路徑存在;您需要在可用時再次調用此方法。」 –

回答

4

context.getExternalFilesDir(null)返回null是一個完全有效的響應。

從文檔:

返回

外部存儲的目錄保存應用程序文件的路徑。如果外部存儲器當前未安裝,則返回null,因此無法確保路徑存在;當它可用時,您將需要再次調用此方法。

http://developer.android.com/reference/android/content/Context.html#getExternalFilesDir(java.lang.String)

所以看起來它失敗有一個外部的SD卡目前無法使用(用戶安裝它,刪除它,等)的設備。

您將不得不使用類似Environment.getExternalStorageState()的東西來檢查此案例,如果它不存在,則會進行相應處理。

3
String state = Environment.getExternalStorageState(); 
     if (Environment.MEDIA_MOUNTED.equals(state) || Environment.MEDIA_MOUNTED_READ_ONLY.equals(state)) { 
      return true; 
     } 
     return false; 
3

可能是權限問題 嘗試添加這個問題,以及:

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> 
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />