2017-05-09 3 views
0

Je tente d'enregistrer l'état d'un commutateur dans SharedPreferences, mais j'ai des difficultés à le faire. J'ai un interrupteur pour activer et désactiver l'audio.Problèmes d'enregistrement d'état avec 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(); 
      } 
      ... 
     } 
     ...  
    }); 
    ... 
} 

A la fin de l'activité, dans la méthode oncCreate J'ai:

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

Les deux extraits de code sont de la même activité.

+0

Quel est le problème? quelle exception/erreur obtenez-vous? – PedroHidalgo

+0

Je ne reçois aucune exception/erreur. L'état n'est tout simplement pas enregistré – John

Répondre

1

Vous ne mettez à jour vos préférences partagées que lorsque la case est cochée, ce qui signifie que vous ne stockez que les valeurs true. suffit de retirer le cas de 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

Cela ne fonctionne pas. Lorsque j'active l'activité du commutateur et du commutateur, le commutateur n'est pas sauvegardé. – John

+0

pouvez-vous fournir un contexte sur l'utilisation de prefs.getBoolean ("audio", true)? – pablobu

0

Avez-vous essayé de récupérer votre booléen sur votre onCreate(), puis de régler le commutateur après?

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