Android 共享首选项未提交
Android Shared Preferences Not Comitting
我有一个正在应用程序中切换的开关。当我关闭应用程序时,我希望保存最后的切换状态。当应用程序打开时,它会将切换状态设置为上次保存的状态。我正在使用 SharedPreferences 来执行此操作。出于某种原因,我的偏好没有保存。我查看了我的代码,没有发现任何问题。
// Set some preferences
Preferences = getApplicationContext().getSharedPreferences(getPackageName(), 0);
// Set the monitor toggle to on or off
final SwitchCompat monitorToggle = (SwitchCompat)findViewById(R.id.monitorToggleButton);
boolean monitorStatus = Preferences.getBoolean("monitorStatus", true);
monitorToggle.setChecked(monitorStatus);
// Setup the monitor toggle view
LinearLayout monitorToggleView = (LinearLayout)findViewById(R.id.monitorToggle);
monitorToggleView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
monitorToggle.toggle();
Preferences.edit().putBoolean("monitorStatus", monitorToggle.isChecked());
Preferences.edit().commit();
}
});
"Preferences"变量是class
中的私有变量
private SharedPreferences Preferences;
试试这个:
Editor editor = Preferences.edit();
editor.putBoolean("monitorStatus", false);
editor.commit();
尝试使用
SharedPreferences prefs = PreferenceManager
.getDefaultSharedPreferences(YourActivity.this);
SharedPreferences.Editor editor = prefs.edit();
editor.putBoolean("monitorStatus", monitorToggle.isChecked());
editor.commit();
其他答案是正确的,但没有解释错误是调用 edit()
两次,即您创建了第二个 Editor
,未进行任何更改并提交。您从未提交对第一个 Editor
.
的更改
而不是这个:
Preferences.edit().putBoolean("monitorStatus", monitorToggle.isChecked());
Preferences.edit().commit();
你可以这样做:
Preferences.edit().putBoolean("monitorStatus", monitorToggle.isChecked()).commit();
无需将 Editor
存储在变量中。
我有一个正在应用程序中切换的开关。当我关闭应用程序时,我希望保存最后的切换状态。当应用程序打开时,它会将切换状态设置为上次保存的状态。我正在使用 SharedPreferences 来执行此操作。出于某种原因,我的偏好没有保存。我查看了我的代码,没有发现任何问题。
// Set some preferences
Preferences = getApplicationContext().getSharedPreferences(getPackageName(), 0);
// Set the monitor toggle to on or off
final SwitchCompat monitorToggle = (SwitchCompat)findViewById(R.id.monitorToggleButton);
boolean monitorStatus = Preferences.getBoolean("monitorStatus", true);
monitorToggle.setChecked(monitorStatus);
// Setup the monitor toggle view
LinearLayout monitorToggleView = (LinearLayout)findViewById(R.id.monitorToggle);
monitorToggleView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
monitorToggle.toggle();
Preferences.edit().putBoolean("monitorStatus", monitorToggle.isChecked());
Preferences.edit().commit();
}
});
"Preferences"变量是class
中的私有变量private SharedPreferences Preferences;
试试这个:
Editor editor = Preferences.edit();
editor.putBoolean("monitorStatus", false);
editor.commit();
尝试使用
SharedPreferences prefs = PreferenceManager
.getDefaultSharedPreferences(YourActivity.this);
SharedPreferences.Editor editor = prefs.edit();
editor.putBoolean("monitorStatus", monitorToggle.isChecked());
editor.commit();
其他答案是正确的,但没有解释错误是调用 edit()
两次,即您创建了第二个 Editor
,未进行任何更改并提交。您从未提交对第一个 Editor
.
而不是这个:
Preferences.edit().putBoolean("monitorStatus", monitorToggle.isChecked());
Preferences.edit().commit();
你可以这样做:
Preferences.edit().putBoolean("monitorStatus", monitorToggle.isChecked()).commit();
无需将 Editor
存储在变量中。