繁体   English   中英

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();
        }
    });

“首选项”变量是类中的私有变量

private SharedPreferences Preferences;

尝试使用

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存储在变量中。

尝试这个:

Editor editor = Preferences.edit();
editor.putBoolean("monitorStatus", false);
editor.commit();

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM