SharedPreferences 不保存布尔值
SharedPreferences not saving boolean
我的 Galaxy Note 3 上的共享首选项有一个奇怪的问题,"saved_name" 首选项工作正常,但是当我尝试保存布尔值时它没有保存。事实上日志是这样写的:
before:true
after:false
这完全没有意义。
final SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(MainActivity.this); //Get the preferences
final SharedPreferences.Editor editor = prefs.edit();
auto_login_checkbox.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
Log.e("login", "before: " + isChecked);
editor.putBoolean("saved_login ", isChecked);
editor.commit();
boolean is_saved = prefs.getBoolean("saved_login", false);
//WHY IS THIS PRINTING FALSE IF THE ABOVE IS TRUE?
Log.e("saved", "after: " + is_saved);
}
});
String name = prefs.getString("saved_name", null); //get a String
if(name != null){
usernameField.setText(name);
}
像这样从 putBoolean 中的 "saved_login" 中删除 space :
editor.putBoolean("saved_login", isChecked);
奥马尔的回答是正确的。此外,为避免将来出现此类问题,最好使用静态字符串变量来存储共享首选项的密钥
private static final String KEY_SAVED_LOGIN = "saved_login";
等等
我的 Galaxy Note 3 上的共享首选项有一个奇怪的问题,"saved_name" 首选项工作正常,但是当我尝试保存布尔值时它没有保存。事实上日志是这样写的: before:true after:false 这完全没有意义。
final SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(MainActivity.this); //Get the preferences
final SharedPreferences.Editor editor = prefs.edit();
auto_login_checkbox.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
Log.e("login", "before: " + isChecked);
editor.putBoolean("saved_login ", isChecked);
editor.commit();
boolean is_saved = prefs.getBoolean("saved_login", false);
//WHY IS THIS PRINTING FALSE IF THE ABOVE IS TRUE?
Log.e("saved", "after: " + is_saved);
}
});
String name = prefs.getString("saved_name", null); //get a String
if(name != null){
usernameField.setText(name);
}
像这样从 putBoolean 中的 "saved_login" 中删除 space :
editor.putBoolean("saved_login", isChecked);
奥马尔的回答是正确的。此外,为避免将来出现此类问题,最好使用静态字符串变量来存储共享首选项的密钥
private static final String KEY_SAVED_LOGIN = "saved_login";
等等