Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/178.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.lang.NullPointerException SharedReferences GetSharedReferences_Java_Android - Fatal编程技术网

java.lang.NullPointerException SharedReferences GetSharedReferences

java.lang.NullPointerException SharedReferences GetSharedReferences,java,android,Java,Android,所以我遇到了一个非常奇怪的问题,除了我,其他人可能很容易解决;-) 不管怎么说,我有很多活动,每一项活动我都要努力让它正常恢复,除了一项活动 无论何时我开始一项活动,或者让一项活动进入睡眠状态并立即恢复,它都可以正常工作。但是当我让它进入睡眠状态时,点击home按钮并启动一系列不同的应用程序,然后再次尝试返回到它,我在GetSharedReferences上得到了一个java.lang.NullPointerException 这怎么会发生呢?SharedReference是否被删除 下面是发生

所以我遇到了一个非常奇怪的问题,除了我,其他人可能很容易解决;-) 不管怎么说,我有很多活动,每一项活动我都要努力让它正常恢复,除了一项活动

无论何时我开始一项活动,或者让一项活动进入睡眠状态并立即恢复,它都可以正常工作。但是当我让它进入睡眠状态时,点击home按钮并启动一系列不同的应用程序,然后再次尝试返回到它,我在GetSharedReferences上得到了一个java.lang.NullPointerException

这怎么会发生呢?SharedReference是否被删除

下面是发生错误的getPreferences方法:

private static SharedPreferences getPreferences() {
    Context applicationContext = App.getContextOfApplication();
    return applicationContext.getSharedPreferences(PREFS_USER, Context.MODE_PRIVATE);
}
这是我的日志:

05-16 20:37:36.461: E/AndroidRuntime(13767): FATAL EXCEPTION: main
05-16 20:37:36.461: E/AndroidRuntime(13767): Process: com.test, PID: 13767
05-16 20:37:36.461: E/AndroidRuntime(13767): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.test/com.test.MessageActivity}: java.lang.NullPointerException
05-16 20:37:36.461: E/AndroidRuntime(13767):    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2305)
05-16 20:37:36.461: E/AndroidRuntime(13767):    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2363)
05-16 20:37:36.461: E/AndroidRuntime(13767):    at android.app.ActivityThread.access$900(ActivityThread.java:161)
05-16 20:37:36.461: E/AndroidRuntime(13767):    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1265)
05-16 20:37:36.461: E/AndroidRuntime(13767):    at android.os.Handler.dispatchMessage(Handler.java:102)
05-16 20:37:36.461: E/AndroidRuntime(13767):    at android.os.Looper.loop(Looper.java:157)
05-16 20:37:36.461: E/AndroidRuntime(13767):    at android.app.ActivityThread.main(ActivityThread.java:5356)
05-16 20:37:36.461: E/AndroidRuntime(13767):    at java.lang.reflect.Method.invokeNative(Native Method)
05-16 20:37:36.461: E/AndroidRuntime(13767):    at java.lang.reflect.Method.invoke(Method.java:515)
05-16 20:37:36.461: E/AndroidRuntime(13767):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1265)
05-16 20:37:36.461: E/AndroidRuntime(13767):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1081)
05-16 20:37:36.461: E/AndroidRuntime(13767):    at dalvik.system.NativeStart.main(Native Method)
05-16 20:37:36.461: E/AndroidRuntime(13767): Caused by: java.lang.NullPointerException
05-16 20:37:36.461: E/AndroidRuntime(13767):    at com.test.LocalStorage.getPreferences(LocalStorage.java:30)
05-16 20:37:36.461: E/AndroidRuntime(13767):    at com.test.LocalStorage.getUsername(LocalStorage.java:83)
05-16 20:37:36.461: E/AndroidRuntime(13767):    at com.test.WebApi.getChat(WebApi.java:711)
05-16 20:37:36.461: E/AndroidRuntime(13767):    at com.test.MessageActivity.onCreate(MessageActivity.java:100)
05-16 20:37:36.461: E/AndroidRuntime(13767):    at android.app.Activity.performCreate(Activity.java:5426)
05-16 20:37:36.461: E/AndroidRuntime(13767):    at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1105)
05-16 20:37:36.461: E/AndroidRuntime(13767):    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2269)
05-16 20:37:36.461: E/AndroidRuntime(13767):    ... 11 more

提前谢谢

正如@Niek_Haarman所指出的,您不能依赖对
上下文
实例的静态引用,即使它是
应用程序
实例,因为Android系统可以销毁和重建
应用程序
活动
实例。因此,如果
App.getContextOfApplication()
正在返回一个静态变量值,这可能就是问题所在

是否有理由
getPreferences()
必须是
静态的
?如果可以将其作为
活动的非静态方法
,则将
活动
本身用作
上下文
,应该没有问题:

private SharedPreferences getPreferences() {
    return getSharedPreferences(PREFS_USER, Context.MODE_PRIVATE);
}

applicationContext
似乎为
null
。请显示
App.getContextOfApplication()
的实现。不要尝试获取/存储对
上下文的静态引用。每次你这样做的时候,都会有一只小猫死去:(不幸的是,在这种情况下,getPreferences不是来自一个活动,而是来自一个处理SharedReferences的类,因此我没有usw的上下文。如果App.getContextOfApplication()如此糟糕,为什么所有的示例都这么说呢?没有标准的
getContextOfApplication()
。有一个
上下文。getApplicationContext()
,但是您需要有一个
上下文
实例才能调用它,这样对您没有帮助。活动怎么可能有上下文而没有应用程序?
上下文
是一个抽象类。
应用程序
活动
继承自它。因此,
活动
没有一个
上下文
——它是一个
上下文
。因此,我在具有getPreferences方法的类上使用活动中的上下文,而不是使用应用程序类中的cstatic上下文。对吗?