Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/file/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 切换按钮不适用于SharedReferences_Java_Android_Togglebutton - Fatal编程技术网

Java 切换按钮不适用于SharedReferences

Java 切换按钮不适用于SharedReferences,java,android,togglebutton,Java,Android,Togglebutton,我正在使用应用程序中的开关按钮打开/关闭音乐。我正在使用SharedReferences保存切换按钮的最后状态。但是,当我退出应用程序并再次运行时,它会始终将“关闭”状态作为默认状态。我想一直保存用户选择的状态,即使他们关闭并再次运行应用程序。下面是我的代码`公共类设置视图扩展AppCompatActivity{ private Switch musicSwitch; @Override protected void onCreate(Bundle savedInstanceState) {

我正在使用应用程序中的开关按钮打开/关闭音乐。我正在使用SharedReferences保存切换按钮的最后状态。但是,当我退出应用程序并再次运行时,它会始终将“关闭”状态作为默认状态。我想一直保存用户选择的状态,即使他们关闭并再次运行应用程序。下面是我的代码`公共类设置视图扩展AppCompatActivity{

private Switch musicSwitch;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_settings);

    musicSwitch = findViewById(R.id.sLLmusicSwitch);
    SharedPreferences sharedPrefs = getSharedPreferences("save", MODE_PRIVATE);
    musicSwitch.setChecked(sharedPrefs.getBoolean("value", true));
    switchCheckListener();
}

private void switchCheckListener() {
    musicSwitch.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
        public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
            if (musicSwitch.isChecked()) {
                // saving state of the switch button
                SharedPreferences.Editor editor = getSharedPreferences("save", MODE_PRIVATE).edit();
                editor.putBoolean("NameOfThingToSave", true);
                editor.apply();
                musicSwitch.setChecked(true);
                // turn on music
                Repository.getInstance().startMusic();
                Toast.makeText(getApplicationContext(), "Music on", Toast.LENGTH_SHORT).show();
            } else {
                // saving state of the switch button
                SharedPreferences.Editor editor = getSharedPreferences("save", MODE_PRIVATE).edit();
                editor.putBoolean("NameOfThingToSave", false);
                editor.apply();
                musicSwitch.setChecked(false);
                //turn off music
                Repository.getInstance().pauseMusic();
                Toast.makeText(getApplicationContext(), "Music off", Toast.LENGTH_SHORT).show();

            }
        }
    });
}
}


`

您正在将布尔状态保存到共享首选项下的键
NameOfThingToSave
,并在onCreate上使用键
value
检索它

在onCreate中,适当设置键值:

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_settings);
    musicSwitch = findViewById(R.id.sLLmusicSwitch);

    SharedPreferences sharedpreferences = getSharedPreferences("save",
            Context.MODE_PRIVATE);
    switchCheckListener();

    musicSwitch.setChecked(sharedpreferences.getBoolean("NameOfThingToSave", false));
}

谢谢,现在开关的状态正常,但每次我关闭并再次运行应用程序时,音乐仍处于关闭状态。知道为什么吗?调用
switchCheckListener()
设置之前已选中
。非常感谢!它现在工作得很好,但我还有一个小问题。当我将音乐状态保持为“开”状态并关闭应用程序并再次运行时,音乐不会启动,直到我进入“设置”活动。有什么想法吗?你需要调用这个
Repository.getInstance().startMusic()当你的应用程序启动时,在任何活动中,检查首选项是否已启用音乐。