我需要有一个共享的首选项,可以由我的班上的多个方法访问。为此,我将共享首选项设置为如下所示:
public SharedPreferences myPreference = PreferenceManager.getDefaultSharedPreferences(getApplicationContext());
然后,我可以通过两种不同的方法像这样访问它:
SharedPreferences.Editor editor=myPreference.edit();
当我这样做时,应用程序崩溃了,这是logcat:
01-23 18:02:51.764 20873-20873 / com.example.griffin.dinnerplannerapp
E / Android运行时:致命异常:主要01-23 18:02:51.764
20873-20873 / com.example.griffin.dinnerplannerapp E / AndroidRuntime:
流程:com.example.griffin.dinnerplannerapp,PID:20873 01-23
18:02:51.764 20873-20873 / com.example.griffin.dinnerplannerapp
E / AndroidRuntime:java.lang.RuntimeException:无法实例化
活动
ComponentInfo {com.example.griffin.dinnerplannerapp / com.example.griffin.dinnerplannerapp.sundayActivity}:
java.lang.NullPointerException:尝试调用虚拟方法
'android.content.Context
空对象上的android.content.Context.getApplicationContext()'
参考01-23 18:02:51.764
20873-20873 / com.example.griffin.dinnerplannerapp E / AndroidRuntime:
在
android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2282)
01-23 18:02:51.764 20873-20873 / com.example.griffin.dinnerplannerapp
E / AndroidRuntime:位于
android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2439)
01-23 18:02:51.764 20873-20873 / com.example.griffin.dinnerplannerapp
E / AndroidRuntime:位于
android.app.ActivityThread.access $ 800(ActivityThread.java:162)01-23
18:02:51.764 20873-20873 / com.example.griffin.dinnerplannerapp
E / AndroidRuntime:位于
android.app.ActivityThread $ H.handleMessage(ActivityThread.java:1348)
01-23 18:02:51.764 20873-20873 / com.example.griffin.dinnerplannerapp
E / AndroidRuntime:位于
android.os.Handler.dispatchMessage(Handler.java:102)01-23
18:02:51.764 20873-20873 / com.example.griffin.dinnerplannerapp
E / AndroidRuntime:位于android.os.Looper.loop(Looper.java:135)01-23
18:02:51.764 20873-20873 / com.example.griffin.dinnerplannerapp
E / AndroidRuntime:位于
android.app.ActivityThread.main(ActivityThread.java:5421)01-23
18:02:51.764 20873-20873 / com.example.griffin.dinnerplannerapp
E / AndroidRuntime:位于java.lang.reflect.Method.invoke(本机
方法)01-23 18:02:51.764
20873-20873 / com.example.griffin.dinnerplannerapp E / AndroidRuntime:
在java.lang.reflect.Method.invoke(Method.java:372)01-23 18:02:51.764
20873-20873 / com.example.griffin.dinnerplannerapp E / AndroidRuntime:
在
com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:914)
01-23 18:02:51.764 20873-20873 / com.example.griffin.dinnerplannerapp
E / AndroidRuntime:位于
com.android.internal.os.ZygoteInit.main(ZygoteInit.java:707)01-23
18:02:51.764 20873-20873 / com.example.griffin.dinnerplannerapp
E / AndroidRuntime:原因:java.lang.NullPointerException:尝试
调用虚拟方法'android.content.Context
空对象上的android.content.Context.getApplicationContext()'
参考01-23 18:02:51.764
20873-20873 / com.example.griffin.dinnerplannerapp E / AndroidRuntime:
在
android.content.ContextWrapper.getApplicationContext(ContextWrapper.java:106)
01-23 18:02:51.764 20873-20873 / com.example.griffin.dinnerplannerapp
E / AndroidRuntime:位于
com.example.griffin.dinnerplannerapp.sundayActivity。(sundayActivity.java:61)
01-23 18:02:51.764 20873-20873 / com.example.griffin.dinnerplannerapp
E / AndroidRuntime:位于
java.lang.reflect.Constructor.newInstance(本机方法)01-23
18:02:51.764 20873-20873 / com.example.griffin.dinnerplannerapp
E / AndroidRuntime:位于java.lang.Class.newInstance(Class.java:1606)
01-23 18:02:51.764 20873-20873 / com.example.griffin.dinnerplannerapp
E / AndroidRuntime:位于
android.app.Instrumentation.newActivity(Instrumentation.java:1066)
01-23 18:02:51.764 20873-20873 / com.example.griffin.dinnerplannerapp
E / AndroidRuntime:位于
android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2272)
01-23 18:02:51.764 20873-20873 / com.example.griffin.dinnerplannerapp
E / AndroidRuntime:位于
android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2439)
01-23 18:02:51.764 20873-20873 / com.example.griffin.dinnerplannerapp
E / AndroidRuntime:位于
android.app.ActivityThread.access $ 800(ActivityThread.java:162)01-23
18:02:51.764 20873-20873 / com.example.griffin.dinnerplannerapp
E / AndroidRuntime:位于
android.app.ActivityThread $ H.handleMessage(ActivityThread.java:1348)
01-23 18:02:51.764 20873-20873 / com.example.griffin.dinnerplannerapp
E / AndroidRuntime:位于
android.os.Handler.dispatchMessage(Handler.java:102)01-23
18:02:51.764 20873-20873 / com.example.griffin.dinnerplannerapp
E / AndroidRuntime:位于android.os.Looper.loop(Looper.java:135)
01-23 18:02:51.764 20873-20873 / com.example.griffin.dinnerplannerapp
E / AndroidRuntime:位于
android.app.ActivityThread.main(ActivityThread.java:5421)01-23
18:02:51.764 20873-20873 / com.example.griffin.dinnerplannerapp
E / AndroidRuntime:位于java.lang.reflect.Method.invoke(本机
方法)01-23 18:02:51.764
20873-20873 / com.example.griffin.dinnerplannerapp E / AndroidRuntime:
在java.lang.reflect.Method.invoke(Method.java:372)01-23
18:02:51.764 20873-20873 / com.example.griffin.dinnerplannerapp
E / AndroidRuntime:位于
com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:914)
01-23 18:02:51.764 20873-20873 / com.example.griffin.dinnerplannerapp
E / AndroidRuntime:位于
com.android.internal.os.ZygoteInit.main(ZygoteInit.java:707)
任何帮助将不胜感激在此先感谢。
最佳答案
您不能在调用getApplicationContext()
方法之前调用onCreate()
,这可能就是为什么它返回null并给出此错误的原因。
因此,我建议您将字段设置在onCreate()
中,或者最好在需要使用PreferenceManager.getDefaultSharedPreferences(getApplicationContext())
的任何地方直接使用SharedPreferences
。
关于java - 公开共享的偏好设置导致应用崩溃,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/34970100/