有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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


共 (2) 个答案

  1. # 1 楼答案

    替换此行:

    DataStorage.getConfig(AppCore.getContext(), Const.FIRST).equals("true")
    

    对于这一个:

    DataStorage.getConfig(this, Const.FIRST).equals("true")
    
  2. # 2 楼答案

    问题在于:

    if (DataStorage.getConfig(AppCore.getContext(),Const.FIRST).equals("true")){
    

    以某种方式AppCore.getContext()返回null,导致NullPointerException

    要修复它,请确保在此处传递一个非空的上下文实例