#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. отлично, счастливого кодирования