I have Three radio buttons inside radiogroup and want, when user check any radio button it must be remain checked until user check any other button (either user close the app or not) and for this purpose I has used sharedPreferences to store this selected checkbox value and retrieve when activity is loaded, but getting error when I loads the activity for selecting checkbox. Below is my code.
Activity.java:
public static SharedPreferences pref;
public static String lang;
public static String chk;
public static RadioButton gujarati;
public static RadioButton hindi;
public static RadioButton english;
public static EditText txtV;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.select_language);
//
// String chk = pref.getString("key_name", null);
// if(chk=="Gujarati"){
// gujarati.setChecked(true);
// }
// else if(chk=="Hindi"){
// hindi.setChecked(true);
// }
// else{
// english.setChecked(true);
//}
//editor.remove("key_name3"); // will delete key key_name3
//editor.remove("key_name4"); // will delete key key_name4
// Save the changes in SharedPreferences
//editor.commit(); // commit changes
//editor.clear();
//editor.commit();
RadioGroup group = (RadioGroup) findViewById(R.id.radioGroup1);
gujarati = (RadioButton) findViewById(R.id.radio0);
hindi = (RadioButton) findViewById(R.id.radio1);
english = (RadioButton) findViewById(R.id.radio2);
txtV = (EditText) findViewById(R.id.editText1);
//int radio_selected = getSharedPreferences("your_prefs", Activity.MODE_PRIVATE).getInt("my_selected_radio",0);
//int radio_selected = getSharedPreferences("your_prefs", Activity.MODE_PRIVATE).edit().putInt("my_selected_radio",selectedValue).commit();
chk = pref.getString("key_name", null);
if(chk == "Gujarati"){
gujarati.setChecked(true);
}
if(chk == "Hindi"){
hindi.setChecked(true);
}
if(chk == "English"){
english.setChecked(true);
}
group.setOnCheckedChangeListener(new OnCheckedChangeListener(){
@Override
public void onCheckedChanged(RadioGroup group, int checkedId) {
// TODO Auto-generated method stub
if(checkedId == R.id.radio0) {
lang = "Gujarati";
pref = getApplicationContext().getSharedPreferences("MyPref", 0);
Editor editor = pref.edit();
editor.putString("key_name", lang);
editor.commit();
chk = pref.getString("key_name", null);
txtV.setText(chk);
} else if(checkedId == R.id.radio1) {
lang = "Hindi";
pref = getApplicationContext().getSharedPreferences("MyPref", 0);
Editor editor = pref.edit();
editor.putString("key_name", lang);
editor.commit();
chk = pref.getString("key_name", null);
txtV.setText(chk);
} else {
lang = "English";
pref = getApplicationContext().getSharedPreferences("MyPref", 0);
Editor editor = pref.edit();
editor.putString("key_name", lang);
editor.commit();
chk = pref.getString("key_name", null);
txtV.setText(chk);
}
}
});
activity.xml:
<RadioGroup
android:id="@+id/radioGroup1"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_below="@+id/textView1"
android:layout_marginTop="25dp" >
<RadioButton
android:id="@+id/radio0"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="RadioButton" />
<RadioButton
android:id="@+id/radio1"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="RadioButton" />
<RadioButton
android:id="@+id/radio2"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="RadioButton" />
</RadioGroup>
<EditText
android:id="@+id/editText1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignLeft="@+id/radioGroup1"
android:layout_below="@+id/radioGroup1"
android:layout_marginLeft="15dp"
android:ems="10" >
<requestFocus />
</EditText>
Logcat:
01-05 04:21:35.055: E/AndroidRuntime(2665): FATAL EXCEPTION: main
01-05 04:21:35.055: E/AndroidRuntime(2665): Process: com.finaldbparse.finaldbparse, PID: 2665
01-05 04:21:35.055: E/AndroidRuntime(2665): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.finaldbparse.finaldbparse/com.finaldbparse.finaldbparse.SelectLanguage}: java.lang.NullPointerException: Attempt to invoke interface method 'java.lang.String android.content.SharedPreferences.getString(java.lang.String, java.lang.String)' on a null object reference
01-05 04:21:35.055: E/AndroidRuntime(2665): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2298)
01-05 04:21:35.055: E/AndroidRuntime(2665): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2360)
01-05 04:21:35.055: E/AndroidRuntime(2665): at android.app.ActivityThread.access$800(ActivityThread.java:144)
01-05 04:21:35.055: E/AndroidRuntime(2665): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1278)
01-05 04:21:35.055: E/AndroidRuntime(2665): at android.os.Handler.dispatchMessage(Handler.java:102)
01-05 04:21:35.055: E/AndroidRuntime(2665): at android.os.Looper.loop(Looper.java:135)
01-05 04:21:35.055: E/AndroidRuntime(2665): at android.app.ActivityThread.main(ActivityThread.java:5221)
01-05 04:21:35.055: E/AndroidRuntime(2665): at java.lang.reflect.Method.invoke(Native Method)
01-05 04:21:35.055: E/AndroidRuntime(2665): at java.lang.reflect.Method.invoke(Method.java:372)
01-05 04:21:35.055: E/AndroidRuntime(2665): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:899)
01-05 04:21:35.055: E/AndroidRuntime(2665): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:694)
01-05 04:21:35.055: E/AndroidRuntime(2665): Caused by: java.lang.NullPointerException: Attempt to invoke interface method 'java.lang.String android.content.SharedPreferences.getString(java.lang.String, java.lang.String)' on a null object reference
01-05 04:21:35.055: E/AndroidRuntime(2665): at com.finaldbparse.finaldbparse.SelectLanguage.onCreate(SelectLanguage.java:55)
01-05 04:21:35.055: E/AndroidRuntime(2665): at android.app.Activity.performCreate(Activity.java:5933)
01-05 04:21:35.055: E/AndroidRuntime(2665): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1105)
01-05 04:21:35.055: E/AndroidRuntime(2665): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2251)
01-05 04:21:35.055: E/AndroidRuntime(2665): ... 10 more
As you have implemented an onCheckedChangeListener
event which is always gets called automatically whenever your activity starts. So the problem occurs is though your sharedpreference value is correct you are getting but after that immediately your CheckedChangeListener
is called so the value which you have from your preference gets reset and you are getting incorrect result.
That is why i have removed the old value whenever you are going to check another radio button.
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.select_language);
group.setOnCheckedChangeListener(new OnCheckedChangeListener() {
@Override
public void onCheckedChanged(RadioGroup group, int checkedId) {
// TODO Auto-generated method stub
pref = getApplicationContext().getSharedPreferences("MyPref", 0);
Editor editor1 = pref.edit();
editor1.remove("key_name");
if (checkedId == R.id.radio0) {
lang = "Gujarati";
pref = getApplicationContext().getSharedPreferences("MyPref", 0);
Editor editor = pref.edit();
editor.putString("key_name", lang);
editor.commit();
// chk = pref.getString("key_name", null);
txtV.setText(lang);
} else if (checkedId == R.id.radio1) {
lang = "Hindi";
pref = getApplicationContext().getSharedPreferences("MyPref", 0);
Editor editor = pref.edit();
editor.putString("key_name", lang);
editor.commit();
// chk = pref.getString("key_name", null);
txtV.setText(lang);
} else if (checkedId == R.id.radio2) {
lang = "English";
pref = getApplicationContext().getSharedPreferences("MyPref", 0);
Editor editor = pref.edit();
editor.putString("key_name", lang);
editor.commit();
// chk = pref.getString("key_name", null);
txtV.setText(lang);
}
}
});
pref = getApplicationContext().getSharedPreferences("MyPref", 0);
chk = pref.getString("key_name", null);
System.err.println("Get value is=====" + chk);
if (chk != null) {
if (chk.equals("Gujarati")) {
gujarati.setChecked(true);
}
if (chk.equals("Hindi")) {
hindi.setChecked(true);
}
if (chk.equals("English")) {
english.setChecked(true);
}
}
}