Java 公共共享首选项导致应用程序崩溃
我需要有一个共享的首选项,它可以被我的类中的多个方法访问。为此,我将共享首选项设置为public,如下所示:Java 公共共享首选项导致应用程序崩溃,java,android,sharedpreferences,Java,Android,Sharedpreferences,我需要有一个共享的首选项,它可以被我的类中的多个方法访问。为此,我将共享首选项设置为public,如下所示: public SharedPreferences myPreference = PreferenceManager.getDefaultSharedPreferences(getApplicationContext()); 然后我可以通过两种不同的方法访问它: SharedPreferences.Editor editor=myPreference.edit(); 当我这样做时,应用
public SharedPreferences myPreference = PreferenceManager.getDefaultSharedPreferences(getApplicationContext());
然后我可以通过两种不同的方法访问它:
SharedPreferences.Editor editor=myPreference.edit();
当我这样做时,应用程序崩溃,下面是日志:
01-23 18:02:51.764 20873-20873/com.example.griffin.dinnerplannerapp
E/AndroidRuntime:致命异常:main 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.sundayaActivity}:
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:at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2439) 01-23 18:02:51.764 20873-20873/com.example.griffin.dinnerplannerapp E/AndroidRuntime:at android.app.ActivityThread.access$800(ActivityThread.java:162)01-23 18:02:51.764 20873-20873/com.example.griffin.dinnerplannerapp E/AndroidRuntime:at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1348) 01-23 18:02:51.764 20873-20873/com.example.griffin.dinnerplannerapp E/AndroidRuntime:at android.os.Handler.dispatchMessage(Handler.java:102)01-23 18:02:51.764 20873-20873/com.example.griffin.dinnerplannerapp E/AndroidRuntime:at-android.os.Looper.loop(Looper.java:135)01-23 18:02:51.764 20873-20873/com.example.griffin.dinnerplannerapp E/AndroidRuntime:at android.app.ActivityThread.main(ActivityThread.java:5421)01-23 18:02:51.764 20873-20873/com.example.griffin.dinnerplannerapp E/AndroidRuntime:at 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:at 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:at com.example.griffin.dinnerplannerapp.sundayaActivity.(sundayaActivity.java:61) 01-23 18:02:51.764 20873-20873/com.example.griffin.dinnerplannerapp E/AndroidRuntime:at java.lang.reflect.Constructor.newInstance(本机方法)01-23 18:02:51.764 20873-20873/com.example.griffin.dinnerplannerapp E/AndroidRuntime:at java.lang.Class.newInstance(Class.java:1606) 01-23 18:02:51.764 20873-20873/com.example.griffin.dinnerplannerapp E/AndroidRuntime:at android.app.Instrumentation.newActivity(Instrumentation.java:1066) 01-23 18:02:51.764 20873-20873/com.example.griffin.dinnerplannerapp E/AndroidRuntime:at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2272) 01-23 18:02:51.764 20873-20873/com.example.griffin.dinnerplannerapp E/AndroidRuntime:at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2439) 01-23 18:02:51.764 20873-20873/com.example.griffin.dinnerplannerapp E/AndroidRuntime:at android.app.ActivityThread.access$800(ActivityThread.java:162)01-23 18:02:51.764 20873-20873/com.example.griffin.dinnerplannerapp E/AndroidRuntime:at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1348) 01-23 18:02:51.764 20873-20873/com.example.griffin.dinnerplannerapp E/AndroidRuntime:at android.os.Handler.dispatchMessage(Handler.java:102)01-23 18:02:51.764 20873-20873/com.example.griffin.dinnerplannerapp E/AndroidRuntime:at-android.os.Looper.loop(Looper.java:135) 01-23 18:02:51.764 20873-20873/com.example.griffin.dinnerplannerapp E/AndroidRuntime:at android.app.ActivityThread.main(ActivityThread.java:5421)01-23 18:02:51.764 20873-20873/com.example.griffin.dinnerplannerapp E/AndroidRuntime:at 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:at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:914) 01-23 18:02:51.764 20873-20873/com.example.griffin.dinnerplannerapp E/AndroidRuntime:at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:707)
我们将非常感谢您的帮助。您是否在清单中声明了访问外部存储的权限
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
//私有静态MyApp实例;
私有静态上下文mContext
public static MyApp getInstance() {
return instance;
}
public static Context getContext() {
// return instance.getApplicationContext();
return mContext;
}
@Override
public void onCreate() {
super.onCreate();
// instance = this;
mContext = getApplicationContext();
}
}
以及舱单:
...
您是否声明了访问外部sto的权限
public static MyApp getInstance() {
return instance;
}
public static Context getContext() {
// return instance.getApplicationContext();
return mContext;
}
@Override
public void onCreate() {
super.onCreate();
// instance = this;
mContext = getApplicationContext();
}