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