2017-05-09 91 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));