Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/391.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/179.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java openFileInput(文件名)nullPointerException:文件名不为null_Java_Android - Fatal编程技术网

Java openFileInput(文件名)nullPointerException:文件名不为null

Java openFileInput(文件名)nullPointerException:文件名不为null,java,android,Java,Android,我有一个扩展应用程序的类,名为MyApplicaton,我用它来存储全局变量,也就是说,我希望能够在整个android应用程序的任何地方访问变量 在activites中,我通过调用 myapp = (MyApplication) this.getApplication(); 我想将这些变量中的一些存储到文件中,并能够从文件中读回它们。 现在,如果我从MyApplication构造函数中调用readFromStorage(),我会得到一个NullPointerException(下面的日志)。但

我有一个扩展应用程序的类,名为MyApplicaton,我用它来存储全局变量,也就是说,我希望能够在整个android应用程序的任何地方访问变量

在activites中,我通过调用

myapp = (MyApplication) this.getApplication();
我想将这些变量中的一些存储到文件中,并能够从文件中读回它们。 现在,如果我从MyApplication构造函数中调用readFromStorage(),我会得到一个NullPointerException(下面的日志)。但是,如果我不从构造函数调用readFromStorage(),而是稍后再调用,例如在调用writeToStorage(而不是从构造函数调用)之后,它会正常执行

如果文件不存在,我希望看到FileNotFoundException。但这不会被扔掉

这里是MyApplication,它扩展了应用程序。滚动到底部查看我的writeToStorage和readFromStorage()方法

导致nullpointer异常的行是:

FileInputStream out = openFileInput(FILENAME);
FILENAME不是null,在调用它之前,我用Log语句检查它

以下是日志输出:

03-26 13:08:05.462: V/Here(26212): In MyApplication constructor
03-26 13:08:05.462: V/Here(26212): In MyApplication readFromStorage
03-26 13:08:05.462: V/Here(26212): FILENAME: globs
03-26 13:08:05.462: W/dalvikvm(26212): threadid=1: thread exiting with uncaught exception (group=0x41fb62d0)
03-26 13:08:05.462: E/AndroidRuntime(26212): FATAL EXCEPTION: main
03-26 13:08:05.462: E/AndroidRuntime(26212): java.lang.RuntimeException: Unable to instantiate application com.example.tetherly.MyApplication: java.lang.NullPointerException
03-26 13:08:05.462: E/AndroidRuntime(26212):    at android.app.LoadedApk.makeApplication(LoadedApk.java:553)
03-26 13:08:05.462: E/AndroidRuntime(26212):    at android.app.ActivityThread.handleBindApplication(ActivityThread.java:4795)
03-26 13:08:05.462: E/AndroidRuntime(26212):    at android.app.ActivityThread.access$1300(ActivityThread.java:151)
03-26 13:08:05.462: E/AndroidRuntime(26212):    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1397)
03-26 13:08:05.462: E/AndroidRuntime(26212):    at android.os.Handler.dispatchMessage(Handler.java:99)
03-26 13:08:05.462: E/AndroidRuntime(26212):    at android.os.Looper.loop(Looper.java:155)
03-26 13:08:05.462: E/AndroidRuntime(26212):    at android.app.ActivityThread.main(ActivityThread.java:5485)
03-26 13:08:05.462: E/AndroidRuntime(26212):    at java.lang.reflect.Method.invokeNative(Native Method)
03-26 13:08:05.462: E/AndroidRuntime(26212):    at java.lang.reflect.Method.invoke(Method.java:511)
03-26 13:08:05.462: E/AndroidRuntime(26212):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1028)
03-26 13:08:05.462: E/AndroidRuntime(26212):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:795)
03-26 13:08:05.462: E/AndroidRuntime(26212):    at dalvik.system.NativeStart.main(Native Method)
03-26 13:08:05.462: E/AndroidRuntime(26212): Caused by: java.lang.NullPointerException
03-26 13:08:05.462: E/AndroidRuntime(26212):    at android.content.ContextWrapper.openFileInput(ContextWrapper.java:159)
03-26 13:08:05.462: E/AndroidRuntime(26212):    at com.example.tetherly.MyApplication.readFromStorage(MyApplication.java:106)
03-26 13:08:05.462: E/AndroidRuntime(26212):    at com.example.package.MyApplication.<init>(MyApplication.java:32)
03-26 13:08:05.462: E/AndroidRuntime(26212):    at java.lang.Class.newInstanceImpl(Native Method)
03-26 13:08:05.462: E/AndroidRuntime(26212):    at java.lang.Class.newInstance(Class.java:1319)
03-26 13:08:05.462: E/AndroidRuntime(26212):    at android.app.Instrumentation.newApplication(Instrumentation.java:988)
03-26 13:08:05.462: E/AndroidRuntime(26212):    at android.app.Instrumentation.newApplication(Instrumentation.java:973)
03-26 13:08:05.462: E/AndroidRuntime(26212):    at android.app.LoadedApk.makeApplication(LoadedApk.java:544)
03-26 13:08:05.462: E/AndroidRuntime(26212):    ... 11 more
03-26 13:08:05.462:V/此处(26212):在MyApplication构造函数中
03-26 13:08:05.462:V/此处(26212):在MyApplication readFromStorage中
03-26 13:08:05.462:V/此处(26212):文件名:globs
03-26 13:08:05.462:W/dalvikvm(26212):threadid=1:线程以未捕获异常退出(组=0x41fb62d0)
03-26 13:08:05.462:E/AndroidRuntime(26212):致命异常:主
03-26 13:08:05.462:E/AndroidRuntime(26212):java.lang.RuntimeException:无法实例化应用程序com.example.tetherly.MyApplication:java.lang.NullPointerException
03-26 13:08:05.462:E/AndroidRuntime(26212):在android.app.LoadedApk.makeApplication(LoadedApk.java:553)上
03-26 13:08:05.462:E/AndroidRuntime(26212):在android.app.ActivityThread.handleBindApplication(ActivityThread.java:4795)上
03-26 13:08:05.462:E/AndroidRuntime(26212):在android.app.ActivityThread.access$1300(ActivityThread.java:151)
03-26 13:08:05.462:E/AndroidRuntime(26212):在android.app.ActivityThread$H.handleMessage(ActivityThread.java:1397)
03-26 13:08:05.462:E/AndroidRuntime(26212):在android.os.Handler.dispatchMessage(Handler.java:99)上
03-26 13:08:05.462:E/AndroidRuntime(26212):在android.os.Looper.loop(Looper.java:155)上
03-26 13:08:05.462:E/AndroidRuntime(26212):位于android.app.ActivityThread.main(ActivityThread.java:5485)
03-26 13:08:05.462:E/AndroidRuntime(26212):位于java.lang.reflect.Method.Invokenactive(本机方法)
03-26 13:08:05.462:E/AndroidRuntime(26212):位于java.lang.reflect.Method.invoke(Method.java:511)
03-26 13:08:05.462:E/AndroidRuntime(26212):在com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1028)
03-26 13:08:05.462:E/AndroidRuntime(26212):在com.android.internal.os.ZygoteInit.main(ZygoteInit.java:795)
03-26 13:08:05.462:E/AndroidRuntime(26212):在dalvik.system.NativeStart.main(本机方法)
03-26 13:08:05.462:E/AndroidRuntime(26212):由以下原因引起:java.lang.NullPointerException
03-26 13:08:05.462:E/AndroidRuntime(26212):位于android.content.ContextWrapper.openFileInput(ContextWrapper.java:159)
03-26 13:08:05.462:E/AndroidRuntime(26212):位于com.example.tetherly.MyApplication.readFromStorage(MyApplication.java:106)
03-26 13:08:05.462:E/AndroidRuntime(26212):位于com.example.package.MyApplication.(MyApplication.java:32)
03-26 13:08:05.462:E/AndroidRuntime(26212):位于java.lang.Class.newInstanceImpl(本机方法)
03-26 13:08:05.462:E/AndroidRuntime(26212):位于java.lang.Class.newInstance(Class.java:1319)
03-26 13:08:05.462:E/AndroidRuntime(26212):在android.app.Instrumentation.newApplication(Instrumentation.java:988)上
03-26 13:08:05.462:E/AndroidRuntime(26212):在android.app.Instrumentation.newApplication(Instrumentation.java:973)上
03-26 13:08:05.462:E/AndroidRuntime(26212):在android.app.LoadedApk.makeApplication(LoadedApk.java:544)上
03-26 13:08:05.462:E/AndroidRuntime(26212):。。。还有11个

问题在于您的应用程序上下文为空

在MyApplication构造函数中,您没有调用super(),因此无法正确创建应用程序

public MyApplication(){
    super();
    //check for and load stored globals in internal storage
    Log.v("Here", "In MyApplication constructor");
    readFromStorage();
}

您过早地将
应用程序作为构造函数中的
上下文使用。它不是为应用生命周期中的
Context
onCreate()之前使用而设置的

基本上,初始化有三个与此问题相关的步骤:

  • 实例化对象

  • 在对象中设置资源和上下文

  • 对对象调用
    onCreate()

  • 在步骤1的实例化(构造函数、成员变量)中,对象还不能用作
    上下文


    这同样适用于活动和服务:您只能在
    onCreate()
    或更高版本中将它们用作
    上下文。

    例外情况并不是说名称为null,而是NPE位于ContextWrapper的第159行。你的应用程序的上下文似乎没有正确设置。你在清单中声明了你的MyApplication吗?凯兰:是的。需要澄清的是:
    code
    code
    Kalyan:对不起,除非你是想用另一种方式声明我的应用程序清单?谢谢laalto。我还没有时间测试这个,但这听起来(而且很可能)是正确的。谢谢
    public MyApplication(){
        super();
        //check for and load stored globals in internal storage
        Log.v("Here", "In MyApplication constructor");
        readFromStorage();
    }