2011-12-29 105 views
0

我知道如果getDir不存在,getDir將創建一個目錄。但我崩潰了:爲什麼我在getDir上得到一個NullPointerException?

File dir= getDir(file,Context.MODE_PRIVATE); 

文件的類型爲String。 logcat中顯示:

12-29 21:56:09.456: ERROR/AndroidRuntime(631): java.lang.NullPointerException 
12-29 21:56:09.456: ERROR/AndroidRuntime(631):  at android.content.ContextWrapper.getDir(ContextWrapper.java:198) 

下面的代碼:

public class ReportHome extends Application{ 
public ReportHome(String message, String file){ 
    …some code… 
    inf(tosend,file); 
} 
public void inf(String c, String file){ 
    File dir= getDir(file,Context.MODE_PRIVATE); 

BTW:什麼是正確的格式logcat中的多條線路的把戲?

回答

4

您確定file參數不爲空嗎?

如果不是,那麼另一種可能是你沒有在一個健全的環境中運行它。

看着source code for getDir(),唯一的另一種可能性是mBase(保存當前Context的私有變量)爲空。我不太確定沒有看到代碼的其餘部分會怎麼樣。

+0

是的,它有「回扣」 – michaelsmith 2011-12-29 21:32:02

+0

我擴大了答案了一下。是否有某些原因導致基於此位置的上下文無效? (這是在一個活動,或其他地方?) – 2011-12-29 21:42:49

0

getDir()方法本身並不是很有趣,因爲它只是將調用委託給其底層的Context對象(就像對每個調用ContextWrapper的調用一樣)。

@Override 
public File getDir(String name, int mode) { 
    return mBase.getDir(name, mode); 
} 

重要的是要知道你從哪裏調用方法。 mBase在調用構造函數ContextWrapperattachBaseContext()時設置。如果您確定file不是null,則看起來好像前面的路徑都沒有被採用。你可以通過打印/調試返回的結果getBaseContext()來驗證你正在處理的上下文不是實際上null

+0

這是上下文。我在構造函數中添加了Context並將其用於getDir,現在事情正常運行。 謝謝! – michaelsmith 2011-12-29 21:57:31

+0

不客氣。我只是在發帖之後才注意到,特雷弗編輯了他原來的答案,基本上包括我說的話,對不起'布特那。 – 2011-12-29 22:01:24

1

請勿在任何組件上實現構造函數,包括Application。在調用super.onCreate()之後,將此邏輯移至onCreate()

相關問題