我知道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的技巧是什么?
答案 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()
?