2011-12-29 76 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()

相关问题