2017-05-09 72 views
0

我试图在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); 

两个代码片段来自相同的活性。

+0

是什么问题?你得到什么异常/错误? – PedroHidalgo

+0

我没有得到任何异常/错误。国家只是没有保存 – John

回答

1

当您选中复选框时,您只会更新您的共享首选项,因此您只能存储true。 只需卸下如果从OnCheckedChanged

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

这是行不通的。当我启用开关和开关活动时,开关不会被保存。 – John

+0

你能提供一些关于如何使用prefs.getBoolean(“audio”,true)的上下文吗? – pablobu

0

你有没有尝试过在你的onCreate()回收你的布尔值,然后设置后,该开关?

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