Android 使用共享首选项时SecondActivity不工作

Android 使用共享首选项时SecondActivity不工作,android,android-studio,Android,Android Studio,我正在做的活动中,我必须在共享首选项中保存一些值,但此活动现在无法打开。在这个问题中,我的代码中显示零错误,因此我无法理解修改的位置和内容 Java代码: public class CreateActivity extends AppCompatActivity { SharedPreferences list= getSharedPreferences("LIST_PREF",MODE_PRIVATE); final SharedPreferences.E

我正在做的活动中,我必须在共享首选项中保存一些值,但此活动现在无法打开。在这个问题中,我的代码中显示零错误,因此我无法理解修改的位置和内容

Java代码:

public class CreateActivity extends AppCompatActivity {

    SharedPreferences list= getSharedPreferences("LIST_PREF",MODE_PRIVATE);
    final SharedPreferences.Editor editor = list.edit();

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_create);

        RadioGroup dur = (RadioGroup) findViewById(R.id.radioGroup);
        dur.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() {
            @Override
            public void onCheckedChanged(RadioGroup group, int checkedId) {
                String duration = "None";
                switch (checkedId){
                    case R.id.radioButtonDay:
                        duration = "Day";
                        break;
                    case R.id.radioButtonMonth:
                        duration = "Month";
                        break;
                    case R.id.radioButtonYear:
                        duration = "Year";
                }
                editor.putString("Duration",duration);
                editor.commit();
            }
        });
    }
    public void createList(View v) {
        EditText listName = (EditText) findViewById(R.id.editTextListName);
        EditText budget = (EditText) findViewById(R.id.editTextBudgetLimit);
        String nameList = listName.getText().toString();
        int budgetLimit = Integer.valueOf(budget.getText().toString());

        if(nameList.length() == 0)
            listName.setError("List Name is required!!");
        if(budgetLimit == 0)
            budget.setError("Budget Limit is not set");

        editor.putString("ListName",nameList);
        editor.putInt("BudgetLimit",budgetLimit);
        editor.commit();

    }
}
我在调试时发现了这一点,但我不知道如何利用这一点。我只能看出我的共享pref中有一些错误,但我不明白它是什么,以及如何解决或调试。 日志:

2020-10-08 20:13:00.399 18073-18073/com.example.yourbudget E/AndroidRuntime:致命异常:main
流程:com.example.yourbudget,PID:18073
java.lang.RuntimeException:无法实例化activity ComponentInfo{com.example.yourbudget/com.example.yourbudget.CreateActivity}:java.lang.NullPointerException:尝试在空对象引用上调用虚拟方法“android.content.SharedReferences android.content.Context.GetSharedReferences(java.lang.String,int)”
在android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2876)上
位于android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3081)
在android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:78)
在android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:108)中
在android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:68)中
在android.app.ActivityThread$H.handleMessage(ActivityThread.java:1831)
位于android.os.Handler.dispatchMessage(Handler.java:106)
位于android.os.Looper.loop(Looper.java:201)
位于android.app.ActivityThread.main(ActivityThread.java:6810)
位于java.lang.reflect.Method.invoke(本机方法)
位于com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:547)
位于com.android.internal.os.ZygoteInit.main(ZygoteInit.java:873)
原因:java.lang.NullPointerException:尝试对空对象引用调用虚拟方法“android.content.SharedReferences android.content.Context.GetSharedReferences(java.lang.String,int)”
位于android.content.ContextWrapper.getSharedReferences(ContextWrapper.java:184)
在com.example.yourbudget.CreateActivity上。(CreateActivity.java:17)
位于java.lang.Class.newInstance(本机方法)
位于android.app.AppComponentFactory.InstanceActivity(AppComponentFactory.java:69)
位于androidx.core.app.CoreComponentFactory.InstanceActivity(CoreComponentFactory.java:45)
位于android.app.Instrumentation.newActivity(Instrumentation.java:1216)
在android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2864)
位于android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3081)
在android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:78)
在android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:108)中
在android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:68)中
在android.app.ActivityThread$H.handleMessage(ActivityThread.java:1831)
位于android.os.Handler.dispatchMessage(Handler.java:106)
位于android.os.Looper.loop(Looper.java:201)
位于android.app.ActivityThread.main(ActivityThread.java:6810)
位于java.lang.reflect.Method.invoke(本机方法)
位于com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:547)
位于com.android.internal.os.ZygoteInit.main(ZygoteInit.java:873)

您应该在
onCreate()
方法中初始化
SharedReferences
实例,因为上下文尚未附加到您的活动(直到它到达
onCreate()

原因:java.lang.NullPointerException:尝试调用虚拟机 方法“android.content.SharedReferences” android.content.Context.getSharedReferences(java.lang.String,int)' 在空对象引用上`

那么问问你自己哪一个是空对象引用? GetSharedReferences被上下文调用这意味着您的上下文(活动)是空对象引用 (尚未创建) 和
这是肯定的,因为在创建时,在调用此方法之前不会先调用

,原因是:java.lang.NullPointerException:尝试调用空对象引用上的虚拟方法“android.content.SharedReferences android.content.Context.GetSharedReferences(java.lang.String,int)”
我在onCreate()中初始化了该对象它解决了这个错误,很好,很快乐
2020-10-08 20:13:00.399 18073-18073/com.example.yourbudget E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.example.yourbudget, PID: 18073
java.lang.RuntimeException: Unable to instantiate activity ComponentInfo{com.example.yourbudget/com.example.yourbudget.CreateActivity}: java.lang.NullPointerException: Attempt to invoke virtual method 'android.content.SharedPreferences android.content.Context.getSharedPreferences(java.lang.String, int)' on a null object reference
    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2876)
    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3081)
    at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:78)
    at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:108)
    at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:68)
    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1831)
    at android.os.Handler.dispatchMessage(Handler.java:106)
    at android.os.Looper.loop(Looper.java:201)
    at android.app.ActivityThread.main(ActivityThread.java:6810)
    at java.lang.reflect.Method.invoke(Native Method)
    at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:547)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:873)
 Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'android.content.SharedPreferences android.content.Context.getSharedPreferences(java.lang.String, int)' on a null object reference
    at android.content.ContextWrapper.getSharedPreferences(ContextWrapper.java:184)
    at com.example.yourbudget.CreateActivity.<init>(CreateActivity.java:17)
    at java.lang.Class.newInstance(Native Method)
    at android.app.AppComponentFactory.instantiateActivity(AppComponentFactory.java:69)
    at androidx.core.app.CoreComponentFactory.instantiateActivity(CoreComponentFactory.java:45)
    at android.app.Instrumentation.newActivity(Instrumentation.java:1216)
    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2864)
    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3081) 
    at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:78) 
    at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:108) 
    at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:68) 
    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1831) 
    at android.os.Handler.dispatchMessage(Handler.java:106) 
    at android.os.Looper.loop(Looper.java:201) 
    at android.app.ActivityThread.main(ActivityThread.java:6810) 
    at java.lang.reflect.Method.invoke(Native Method) 
    at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:547) 
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:873)