SharedPreferences ne persiste pas
Je suis à l'aide d'un SharedPreferences dans Android.Tout fonctionne très bien dans la même session.
Cependant une fois que je relance l'application, toutes les préférences qui ont été définis à partir de la précédente session sont perdus.
Est-ce que je besoin de spécifier de dire la SharedPreferences à accrocher autour d'une exécution?
Je suis de la création de l'préférences en appelant
SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(this);
Puis-je définir des propriétés, par exemple
preferences.edit().putString(key, value);
et je le reçois par
preferences.getString(key, defaultValue);
Grâce,
Victor
- ont u écrite de l'éditeur.commit() ?
- Si vous êtes
Set<String
n'est pas l'enregistrement entre appli des sessions, c'est à cause d'un bug. Utilisez cette solution de contournement: stackoverflow.com/a/26315757/2371425. - Merci sooo beaucoup Sakiboy. J'ai perdu presque 4 heures à essayer de comprendre pourquoi après l'appel à s'engager, et de vérifier les changements tout en restant dans le même contexte, mais ensuite, passer à un autre contexte et de la Valeur que j'ai mis à jour revenue à l'ancienne Valeur. Android veuillez document de ce genre de choses et de faire votre travail de manière à ce que je peux faire mine de s'il vous plaît. 4 heures gaspillées à la cpu parce que, pour une raison quelconque Android/Google a une mauvaise documentation...waow!
Vous devez vous connecter pour publier un commentaire.
SharedPreferences sont persistants à travers la relance, le redémarrer, je pense que le problème est que vous n'êtes pas commettre les préférences, l'utilisation suivantes pour stocker des valeurs dans les préférences:
apply()
est mieux quecommit()
car il permet l'écriture de se produire dans l'arrière-planVous êtes susceptible de ne pas commettre de vos modifications. Définir les propriétés comme
Sans commettre vous êtes péter dans le vent.
C'est de travailler pour moi s'il vous plaît essayer:
pour obtenir la valeur en pref
pour enregistrer vlue utilisation onstoe ou onPause methds
Qui fonctionne pour moi, beaux et sains
Si vous développez pour l'API de niveau ? et ci-dessus, alors vous devriez être en utilisant
editor.apply()
au lieu deeditor.commit()
lorsque par programmation à la modification de vos préférences.editor.commit()
a été abandonné, eteditor.apply()
va gérer le réel de la persistance dans le fond, quieditor.commit()
ne pas le faire.Noter que
editor.apply()
, si elle échoue, le fait en silence.C'est le code qui fonctionne pour moi.
Les préférences ne seront pas enregistrées jusqu'à ce que vous vous engagez, c'est à dire:
MODIFIER: Le ci-dessus a un bug subtil (de commentaires); vous avez besoin de garder la référence à l'objet de l'éditeur, sinon l'exemple ci-dessus, qui engage la valeur va créer une nouvelle instance. Devrait être:
De référence, à partir de la Android docs:
preferences.edit()
de la création d'unSharedPreferences.Editor
objet. Lorsque vouscommit
vous s'engager dans une instance différente de celle que vous avez appeléputString
, par conséquent, il ne persistera pas. Je vous recommande de lire à nouveau ledocs
que vous avez posté.