调用getFilesDir()时崩溃

3

调用getFilesDir()时崩溃,以下是代码:

public void generateFile() throws IOException{


    File fileDir = getFilesDir(); //crashing

    String filedir=fileDir.toString();

    String OUTPUT_FILE = "123.txt";
    String data = "TEST DATA to WRITE";

    File newFile = new File(fileDir,OUTPUT_FILE);

    ........

和堆栈跟踪

03-24 16:33:33.623: VERBOSE/APP(2180): Calling GenerateFile
03-24 16:33:33.623: DEBUG/AndroidRuntime(2180): Shutting down VM
03-24 16:33:33.623: WARN/dalvikvm(2180): threadid=1: thread exiting with uncaught exception (group=0x4001d8a8)
03-24 16:33:33.670: ERROR/AndroidRuntime(2180): FATAL EXCEPTION: main
03-24 16:33:33.670: ERROR/AndroidRuntime(2180): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.Android.APP/com.Android.APP.Readings}: java.lang.NullPointerException
03-24 16:33:33.670: ERROR/AndroidRuntime(2180):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2663)
03-24 16:33:33.670: ERROR/AndroidRuntime(2180):     at android.app.ActivityThread.startActivityNow(ActivityThread.java:2503)
03-24 16:33:33.670: ERROR/AndroidRuntime(2180):     at android.app.LocalActivityManager.moveToState(LocalActivityManager.java:127)
03-24 16:33:33.670: ERROR/AndroidRuntime(2180):     at android.app.LocalActivityManager.startActivity(LocalActivityManager.java:339)
03-24 16:33:33.670: ERROR/AndroidRuntime(2180):     at android.widget.TabHost$IntentContentStrategy.getContentView(TabHost.java:654)
03-24 16:33:33.670: ERROR/AndroidRuntime(2180):     at android.widget.TabHost.setCurrentTab(TabHost.java:326)
03-24 16:33:33.670: ERROR/AndroidRuntime(2180):     at android.widget.TabHost$2.onTabSelectionChanged(TabHost.java:132)
03-24 16:33:33.670: ERROR/AndroidRuntime(2180):     at android.widget.TabWidget$TabClickListener.onClick(TabWidget.java:456)
03-24 16:33:33.670: ERROR/AndroidRuntime(2180):     at android.view.View.performClick(View.java:2408)
03-24 16:33:33.670: ERROR/AndroidRuntime(2180):     at android.view.View$PerformClick.run(View.java:8818)
03-24 16:33:33.670: ERROR/AndroidRuntime(2180):     at android.os.Handler.handleCallback(Handler.java:587)
03-24 16:33:33.670: ERROR/AndroidRuntime(2180):     at android.os.Handler.dispatchMessage(Handler.java:92)
03-24 16:33:33.670: ERROR/AndroidRuntime(2180):     at android.os.Looper.loop(Looper.java:123)
03-24 16:33:33.670: ERROR/AndroidRuntime(2180):     at android.app.ActivityThread.main(ActivityThread.java:4627)
03-24 16:33:33.670: ERROR/AndroidRuntime(2180):     at java.lang.reflect.Method.invokeNative(Native Method)
03-24 16:33:33.670: ERROR/AndroidRuntime(2180):     at java.lang.reflect.Method.invoke(Method.java:521)
03-24 16:33:33.670: ERROR/AndroidRuntime(2180):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)
03-24 16:33:33.670: ERROR/AndroidRuntime(2180):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)
03-24 16:33:33.670: ERROR/AndroidRuntime(2180):     at dalvik.system.NativeStart.main(Native Method)
03-24 16:33:33.670: ERROR/AndroidRuntime(2180): Caused by: java.lang.NullPointerException
03-24 16:33:33.670: ERROR/AndroidRuntime(2180):     at android.content.ContextWrapper.getFilesDir(ContextWrapper.java:178)
03-24 16:33:33.670: ERROR/AndroidRuntime(2180):     at com.Android.APP.Logging.generateFile(Logging.java:33)
03-24 16:33:33.670: ERROR/AndroidRuntime(2180):     at com.Android.APP.Readings.onCreate(Readings.java:90)
03-24 16:33:33.670: ERROR/AndroidRuntime(2180):     at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
03-24 16:33:33.670: ERROR/AndroidRuntime(2180):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2627)
03-24 16:33:33.670: ERROR/AndroidRuntime(2180):     ... 18 more

1
Readings.java的第90行是什么? - Blundell
日志记录源自哪里?您可能需要将“this”作为上下文传递到Logging.generateFile中。 - matheeeny
我有一些像这样的东西, Logging obj = new Logging(); try { obj.generateFile(); ....... } 而类 Logging 扩展了 activity。 - m4n07
2个回答

2

你的类是否继承了Activity?需要更多代码上下文才能给出正确的答案。

编辑

你在哪里调用generateFile()?你可能在应用程序完全加载之前就要求FilesDirectory。

你只需要进行一些检查:

public void generateFile() throws IOException{

 File fileDir = getFilesDir(); //crashing
 if(fileDir != null){
   String filedir=fileDir.toString();

   String OUTPUT_FILE = "123.txt";
   String data = "TEST DATA to WRITE";

   File newFile = new File(fileDir,OUTPUT_FILE);
 } else {
    Log.e("MyApp", "Something went wrong, filesDir is null");
 }
}

// 这是一条注释 - dave.c
@Dave 他回答后,我打算编辑我的答案为完整的答案。但是他说得很有道理。 - Blundell
我有这样一个东西,日志记录 obj = new 日志记录(); 尝试 { obj.generateFile(); ....... } 和类日志记录扩展活动 - m4n07
错误,仍然会因该答案而崩溃的是那一行写着“崩溃”的代码。 - untill

1
该帖子作者没有提供足够的信息以便建议解决方案,但我遇到了类似的问题。我将调用包括getFilesDir()方法的代码移到了方法中。在此之前,它是在定义MyActivity字段时被调用的。在我将其移动到该活动的onCreate()中后,异常消失了。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接