java在空对象引用上的ut共享首选项有什么问题?
我有一个有共同偏好的主要活动和课程
public class MainActivity extends AppCompatActivity {
private SectionsPagerAdapter mSectionsPagerAdapter;
private ViewPager mViewPager;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
if (DataStorage.getConfig(AppCore.getContext(),Const.FIRST).equals("true")){
FragmentManager manager = getSupportFragmentManager();
FirstDialog firstDialog = new FirstDialog();
firstDialog.show(manager,"dialog");
DataStorage.setConfig(AppCore.getActivity(), Const.FIRST,"false");
}
}
}
以及具有共享首选项的数据存储类:
public class DataStorage {
public static String getConfig(Context context, String name) {
return getConfig(context, name, "");
}
public static String getConfig(Context context, String name, String defValue) {
SharedPreferences settings = context.getSharedPreferences(
Const.NAME, 0);
String ret = settings.getString(name, defValue);
return ret;
}
public static void setConfig(Context context, String name, String value) {
SharedPreferences settings = context.getSharedPreferences(
Const.NAME, 0);
SharedPreferences.Editor editor = settings.edit();
editor.putString(name, value);
editor.commit();
}
}
所以我有一个错误是这样说的:
E/AndroidRuntime: FATAL EXCEPTION: main
Process: nortti.ru.dogshelter, PID: 16246
java.lang.RuntimeException: Unable to start activity ComponentInfo{nortti.ru.dogshelter/nortti.ru.dogshelter.activities.MainActivity}: java.lang.NullPointerException: Attempt to invoke virtual method '安卓.content.SharedPreferences 安卓.content.Context.getSharedPreferences(java.lang.String, int)' on a null object reference
at 安卓.app.ActivityThread.performLaunchActivity(ActivityThread.java:2326)
at 安卓.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2387)
at 安卓.app.ActivityThread.access$800(ActivityThread.java:147)
at 安卓.app.ActivityThread$H.handleMessage(ActivityThread.java:1281)
at 安卓.os.Handler.dispatchMessage(Handler.java:102)
at 安卓.os.Looper.loop(Looper.java:135)
at 安卓.app.ActivityThread.main(ActivityThread.java:5264)
at java.lang.reflect.Method.invoke(Native Method)
at java.lang.reflect.Method.invoke(Method.java:372)
at com.安卓.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:900)
at com.安卓.internal.os.ZygoteInit.main(ZygoteInit.java:695)
Caused by: java.lang.NullPointerException: Attempt to invoke virtual method '安卓.content.SharedPreferences 安卓.content.Context.getSharedPreferences(java.lang.String, int)' on a null object reference
at nortti.ru.dogshelter.DataStorage.getConfig(DataStorage.java:15)
at nortti.ru.dogshelter.DataStorage.getConfig(DataStorage.java:11)
at nortti.ru.dogshelter.activities.MainActivity.onCreate(MainActivity.java:44)
at 安卓.app.Activity.performCreate(Activity.java:5975)
at 安卓.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1105)
at 安卓.app.ActivityThread.performLaunchActivity(ActivityThread.java:2269)
at 安卓.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2387)
at 安卓.app.ActivityThread.access$800(ActivityThread.java:147)
at 安卓.app.ActivityThread$H.handleMessage(ActivityThread.java:1281)
at 安卓.os.Handler.dispatchMessage(Handler.java:102)
at 安卓.os.Looper.loop(Looper.java:135)
at 安卓.app.ActivityThread.main(ActivityThread.java:5264)
at java.lang.reflect.Method.invoke(Native Method)
at java.lang.reflect.Method.invoke(Method.java:372)
at com.安卓.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:900)
at com.安卓.internal.os.ZygoteInit.main(ZygoteInit.java:695)
数据存储中的上下文有误是seamed
# 1 楼答案
替换此行:
对于这一个:
# 2 楼答案
问题在于:
以某种方式
AppCore.getContext()
返回null,导致NullPointerException
要修复它,请确保在此处传递一个非空的上下文实例