为什么我在getDir上得到NullPointerException?

时间:2011-12-29 21:16:58

标签: java android file

我知道getDir会创建一个目录,如果它还不存在的话。但我正在崩溃:

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);

顺便说一下:正确格式化多行logcat的技巧是什么?

3 个答案:

答案 0 :(得分:4)

您确定file参数不为空吗?

如果不是,那么另一种可能性就是你没有在理智的环境中运行它。

查看source code for getDir(),唯一的另一种可能性是mBase(保存当前Context的私有变量)为空。我不太确定如果不看你的其余代码会怎么样。

答案 1 :(得分:1)

不要在任何组件上实现构造函数,包括Application。在调用onCreate()后,将此逻辑移至super.onCreate()

答案 2 :(得分:0)

getDir()方法本身并不是很有趣,因为它只是将调用委托给它的底层Context对象(就像每次调用ContextWrapper一样)。

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

知道从哪里调用方法非常重要。调用mBase的构造函数或ContextWrapper时设置attachBaseContext()。如果您确定file不是null,则看起来好像前者都没有被采用。您是否可以通过打印/调试null的返回结果来验证您正在处理的上下文实际上不是getBaseContext()