2016-11-29 5 views
0

J'apprends Android et pour ce projet, j'ai besoin de sauvegarder les données de l'utilisateur - changement de couleur des boutons, dans ce cas -. Au cours du programme, le changement se produit (onClick), mais quand je redémarre l'application, rien ne se passe - le changement n'a pas été enregistré (ou lu ...) Quelqu'un peut-il m'aider? Code:Android: problème de stockage de données (SharedPreferences)

final String paintKey = "paint"; 

    protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

    buttonCreate(); 
    preferences(); 
    togglePlay(); 
} 

    public void preferences(){ //the issue in this method? 

    SharedPreferences settings = PreferenceManager.getDefaultSharedPreferences(this); 
    data = settings.getString("stage", "Indoors"); 
    settings.getBoolean(paintKey,false); 

    String backGround = settings.getString("stage", "Indoors"); 

    if (backGround.equals("Indoors")) { 
     Picasso.with(this).load(R.drawable.shocked_crowd).fit().centerCrop().into(stage); 

    } 
    if (backGround.equals("Street")) { 
     Picasso.with(this).load(R.drawable.coins).fit().centerCrop().into(stage); 

    } 
} 

public void changeColor(){ 
    if(!paint) { //paint variable has global scope and it is set to false 
     c1.setBackgroundColor(Color.YELLOW); 

     paint = true; 
    }else{ 
     c1.setBackgroundColor(Color.BLUE); 

     paint = false; 
    } 
    SharedPreferences settings = PreferenceManager.getDefaultSharedPreferences(this); 
    SharedPreferences.Editor editor = settings.edit(); 
    editor.putBoolean("paint", paint); 
    editor.commit(); 
} 

EDIT: la méthode onClick:

onClick public void (Voir v) {

if(v==color){ 

     changeColor(); 
    } 

EDIT: Voici comment je l'ai maintenant:

public void preferences(){ 

    SharedPreferences settings = PreferenceManager.getDefaultSharedPreferences(this); 
    data = settings.getString("stage", "Indoors"); 
    final String paintKey = "paint"; 
    settings.getBoolean(paintKey,false); 

Mauvais? si je mets éditeur au lieu de paramètres que je reçois rouge souligné

+0

Je ne vois pas un morceau de code lu par la touche "paint": 'settings.getBoolean (" paint ", false)'. Vous devriez lire la même clé que vous étiez en train d'enregistrer. Idéalement, faites une variable 'final paintKey =" paint "'. – foxanna

+0

J'ai ajouté la ligne, mais il n'a pas travaillé ... aussi la dernière chaîne – glassraven

+0

S'il vous plaît mettre à jour la question et le comportement réel en conséquence – foxanna

Répondre

3

Pour travailler avec SharedPreferences vous avez besoin d'une clé globale

final String paintKey = "paint" 

Pour écrire les informations valeur booléenne SharedPreferences utilisation

SharedPreferences.Editor editor = PreferenceManager.getDefaultSharedPreferences(this).edit(); 
editor.putBoolean(paintKey, paint).commit(); 

Pour lire que données plus tard

paint = settings.getBoolean(paintKey, false); 
0

Cette ligne reçoit une valeur des SharedPreferences et l'ignore rapidement. Vous devez sauvegarder la valeur de retour dans une variable afin de l'utiliser plus tard:

boolean paint = settings.getBoolean(paintKey,false); 

Cela va créer une variable locale qui ne peut être utilisé dans la même méthode. Si vous devez utiliser la valeur dans d'autres méthodes, créez un champ à la place.