我需要有一个共享的首选项,可以由我的班上的多个方法访问。为此,我将共享首选项设置为如下所示:

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/

10-10 19:49