web-dev-qa-db-fra.com

sharedPreferences ne sera pas partagé entre les activités

J'essaie d'utiliser SharedPreferences pour enregistrer les paramètres. Mais je n'arrive pas à faire en sorte que les données soient partagées entre mes activités. Le code que j'utilise parvient à enregistrer les paramètres, mais chaque activité semble avoir sa propre version de chaque variable.

Donc par exemple. J'ai une activité de paramètres audio dans laquelle l'utilisateur peut attribuer une valeur à une variable "musicVolume" qui est enregistrée. Si je ferme le jeu et le recharge, l'activité des paramètres audio "se souvient" de la valeur. Mais si j'essaie de charger la valeur dans une autre activité, cela ne fonctionne pas. Mais, ils peuvent tous charger et sauvegarder leurs propres variables du même nom.

Ce sont les méthodes que j'utilise pour enregistrer les variables. Il existe une copie de chacune de ces méthodes dans chaque activité. ** 

Comme je l'ai dit, ils travaillent, mais ils ne peuvent sembler lire et écrire que des données pour l'activité individuelle dans laquelle ils se trouvent.

public void SavePreferences(String key, float value) {
        SharedPreferences sharedPreferences = getPreferences(MODE_PRIVATE);
        SharedPreferences.Editor editor = sharedPreferences.edit();
        editor.putFloat(key, value);
        editor.commit();
}

public void LoadPreferences() {
        SharedPreferences sharedPreferences = getPreferences(MODE_PRIVATE);
        musicVolume = sharedPreferences.getFloat("musicVolume", (float)0.123);
        soundEffectsVolume = sharedPreferences
                        .getFloat("soundEffectsVolume", (float)0.123);
}

public void ClearPreferences() {
        SharedPreferences sharedPreferences = getPreferences(MODE_PRIVATE);
        SharedPreferences.Editor editor = sharedPreferences.edit();
        editor.clear();
        editor.commit();
}

** Je sais qu'il existe un meilleur moyen de faire cela, mais je suis un très novice programmeur. J'ai essayé de suivre les conseils d'un autre fil 

Préférences partagées Android

mais partout où j'ai essayé de mettre les lignes 

protected AppPreferences appPrefs;
appPrefs = new AppPreferences(getApplicationContext());

Je reçois une erreur d'une sorte ou d'une autre. Mais plus important encore, en lisant les autres commentaires sur le fil, les gens disent que les Préférences Partagées sont automatiquement partagées entre les activités d’un même paquet, c’est ainsi que je pensais qu'elles marchaient.

18
user922220

Vous utilisez getPreferences (MODE) . Utilisez getSharedPreferences ("PREF_NAME", MODE) à la place. De cette façon, vous donnerez un nom à votre préférence particulière et vous pourrez l'appeler par son nom (PREF_NAME ici), quelle que soit l'activité souhaitée.

//------get sharedPreferences

SharedPreferences pref = context.getSharedPreferences("PREF_NAME", Context.MODE_PRIVATE);

//-------get a value from them

pref.getString("NAME", "Android");

//--------modify the value

pref.edit().putString("NAME", "Simone").commit();

//--------reset preferences

pref.edit().clear().commit();
36
Niraj Burde

Comme il a été dit, utilisez getSharedPreferences(String name, int mode) plutôt que getPreferences (int mode). Si vous êtes intéressé, la documentation de ces deux méthodes illustre la différence. Selon la documentation AndroidgetPreferences(int) fait ce qui suit:

Récupérez un objet SharedPreferences pour accéder aux préférences privées de Pour cette activité. Ceci appelle simplement la méthode sous-jacente GetSharedPreferences (String, int) en transmettant le nom de classe De cette activité en tant que nom de préférence.

11
Matt Shaw

Si vous ne faites rien d'extraordinaire avec les préférences, j'utiliserais simplement le moyen par défaut d'y accéder. Cela semble être votre problème. 

SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this);

Voici une excellente écriture avec plus de détails, vous réalisez que vous faites tout à peu près correctement, à l’exception de l’obtention de votre descripteur. Comment puis-je obtenir les SharedPreferences d’une PreferenceActivity sous Android?

AUSSI: N'oubliez pas que la nouvelle méthode consiste à appeler .apply () à la place de .commit () C'était l'un des vidéos # io2012 .. 

7
Frank Sposaro

Vous devriez utiliser ceci

SharedPreferences pref = context.getSharedPreferences("PREF_NAME", Context.MODE_PRIVATE);

Ou

SharedPreferences pref = PreferenceManager.getDefaultSharedPreferences(context);
2
Singhak

Si vous avez le même problème que moi, c'est très simple. Quand vous allez sauvegarder les préférences, sauvegardez-le comme ceci:

SharedPreferences sp = getSharedPrefenreces("Preference",MODE_PRIVATE);

Et pas:

 SharedPreferences sp = getSharedPrefenreces("Preference's name",Context.MODE_PRIVATE);

Je sais combien il est important dans certains cas de partager les références.

0
Yuri Cavalcante