SecondActivity не работает при использовании общих настроек

#android #android-studio

#Android #android-studio

Вопрос:

Я выполнял действие, в котором мне приходилось сохранять некоторые значения в общих настройках, но это действие сейчас не открывается. В этой проблеме в моем коде отображаются нулевые ошибки, поэтому я не могу понять, где и что нужно изменить

JavaCode:

 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();

    }
}
  

Я нашел это при отладке, но я понятия не имею, что с этим делать. Я мог бы просто понять, что в моих общих настройках есть какая-то ошибка, но я не понимаю, что это такое и как ее решить или отладить.
LOGCAT:

 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 

Комментарии:

1. 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

Ответ №1:

Предполагается, что вы должны инициализировать SharedPreferences экземпляр в onCreate() методе, поскольку контекст еще не привязан к вашей активности (пока он не достигнет onCreate() )

Ответ №2:

ошибка говорит :

Вызвано: java.lang.Исключение NullPointerException: попытка вызвать виртуальный метод ‘android.content.SharedPreferences android.content.Context.getSharedPreferences(java.lang.Строка, int) ‘для нулевой ссылки на объект`

итак, спросите себя, какая ссылка на нулевой объект? ваши getSharedPreferences вызываются вашим контекстом это означает, что ваш контекст (Activity) является нулевой ссылкой на объект (еще не создан), и это да, потому что on create не вызывает сначала перед вызовом этого метода

Комментарии:

1. Я инициализировал объект в onCreate(), и он устранил ошибку

2. отлично, счастливого кодирования