使用SharedPreferences保存状态时出现问题

时间:2017-05-09 18:26:07

标签: android sharedpreferences

我正在尝试在SharedPreferences中保存交换机的状态,但是我在执行此操作时遇到了问题。我有一个开关用于打开和关闭音频。

public void audio() {
    audio.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
        @Override
        public void onCheckedChanged(CompoundButton compoundButton, boolean isChecked) {
            if (isChecked) {
                player= MediaPlayer.create(legoActivity.this, R.raw.sound);
                player.start();

                SharedPreferences sharedPreferences = getSharedPreferences("prefss", MODE_PRIVATE);
                SharedPreferences.Editor editor = sharedPreferences.edit();
                editor.putBoolean("audio", isChecked);
                editor.apply();
                editor.commit();
            }
            ...
        }
        ...       
    });
    ...
}

在活动结束时,我使用oncCreate方法:

SharedPreferences prefs = getSharedPreferences("prefss", MODE_PRIVATE);
prefs.getBoolean("audio", true);

两个代码段都来自同一个活动。

2 个答案:

答案 0 :(得分:1)

选中此复选框后,您只更新共享首选项,因此您只存储true。 只需从OnCheckedChanged

中删除if
@Override
public void onCheckedChanged(CompoundButton compoundButton, boolean isChecked) {
    player = MediaPlayer.create(legoActivity.this, R.raw.sound);
    player.start();

    SharedPreferences sharedPreferences = getSharedPreferences("prefss", MODE_PRIVATE);
    SharedPreferences.Editor editor = sharedPreferences.edit();
    editor.putBoolean("audio", isChecked);
    editor.apply();
    editor.commit();
}

答案 1 :(得分:0)

您是否尝试在onCreate()上恢复布尔值,然后在此之后设置开关?

 SharedPreferences prefs = getSharedPreferences("prefss", MODE_PRIVATE);
 audio.setChecked(prefs.getBoolean("audio", true));