我在 radiogroup 中有三个单选按钮,并且希望,当用户检查任何单选按钮时,必须保持选中状态,直到用户检查任何其他按钮(用户关闭应用程序或不关闭应用程序),为此我使用 sharedPreferences 来存储此选定的复选框值并在加载活动时检索,但在加载活动以选择复选框时出错。下面是我的代码。
活动.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);
}
}
});
活动.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>
日志猫:
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