Ошибка в коде (onCreate) в Android Studio
Как исправить ошибку?
введите сюда код
RadioGroup radioGroup;
// это будет именем файла настроек
public static final String APP_PREFERENCES = "mysettings";
final String KEY_RADIOBUTTON_INDEX = "SAVED_RADIO_BUTTON_INDEX";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
radioGroup = findViewById(R.id.sex_RadioGroup);
radioGroup
.setOnCheckedChangeListener(radioGroupOnCheckedChangeListener); //ошибка в этой строчке
LoadPreferences();
}
RadioGroup.OnCheckedChangeListener radioGroupOnCheckedChangeListener = new RadioGroup.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(RadioGroup group, int checkedId) {
RadioButton checkedRadioButton = (RadioButton) radioGroup
.findViewById(checkedId);
int checkedIndex = radioGroup.indexOfChild(checkedRadioButton);
SavePreferences(KEY_RADIOBUTTON_INDEX, checkedIndex);
}
};
private void SavePreferences(String key, int value) {
SharedPreferences sharedPreferences = getSharedPreferences(
APP_PREFERENCES, MODE_PRIVATE);
SharedPreferences.Editor editor = sharedPreferences.edit();
editor.putInt(key, value);
editor.apply();
}
private void LoadPreferences() {
SharedPreferences sharedPreferences = getSharedPreferences(
APP_PREFERENCES, MODE_PRIVATE);
int savedRadioIndex = sharedPreferences.getInt(
KEY_RADIOBUTTON_INDEX, 0);
RadioButton savedCheckedRadioButton = (RadioButton) radioGroup
.getChildAt(savedRadioIndex);
savedCheckedRadioButton.setChecked(true);
}
Ошибка: at com.whattowear.MainActivity.onCreate(MainActivity.java:35) UPD: ошибку так же отметил в коде
2020-02-13 20:07:01.706 1954-1954/? E/AndroidRuntime: FATAL EXCEPTION: main Process: com.whattowear, PID: 1954 java.lang.RuntimeException: Unable to start activity ComponentInfo{com.whattowear/com.whattowear.MainActivity}: java.lang.NullPointerException: Attempt to invoke virtual method 'void android.widget.RadioGroup.setOnCheckedChangeListener(android.widget.RadioGroup$OnCheckedChangeListener)' on a null object reference at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2977) at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3114) at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:78) at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:113) at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:71) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1859) at android.os.Handler.dispatchMessage(Handler.java:106) at android.os.Looper.loop(Looper.java:201) at android.app.ActivityThread.main(ActivityThread.java:6831) 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:927) Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'void android.widget.RadioGroup.setOnCheckedChangeListener(android.widget.RadioGroup$OnCheckedChangeListener)' on a null object reference at com.whattowear.MainActivity.onCreate(MainActivity.java:35) at android.app.Activity.performCreate(Activity.java:7224) at android.app.Activity.performCreate(Activity.java:7213) at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1271) at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2957) at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3114) at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:78) at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:113) at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:71) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1859) at android.os.Handler.dispatchMessage(Handler.java:106) at android.os.Looper.loop(Looper.java:201) at android.app.ActivityThread.main(ActivityThread.java:6831) 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:927)
Ответы (1 шт):
Попробуйте перенести код, где вы создаёте OnCheckedChangeListener перед тем, как его присваивать к radioGroup, то есть:
RadioGroup.OnCheckedChangeListener radioGroupOnCheckedChangeListener = new RadioGroup.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(RadioGroup group, int checkedId) {
RadioButton checkedRadioButton = (RadioButton) radioGroup
.findViewById(checkedId);
int checkedIndex = radioGroup.indexOfChild(checkedRadioButton);
SavePreferences(KEY_RADIOBUTTON_INDEX, checkedIndex);
}
};
radioGroup.setOnCheckedChangeListener(radioGroupOnCheckedChangeListener);