Être capable de stocker des informations sur nos activités sur une base temporaire est très utile, mais le plus souvent, nous voulons que notre application se souvienne de l'information sur plusieurs sessions.
Android prend en charge SQLite, mais cela pourrait être beaucoup de frais généraux pour des données simples, telles que le nom de l'utilisateur ou un score élevé. Heureusement, Android fournit également une option légère pour ces scénarios, avec SharedPreferences.

Se préparer
Vous pouvez soit utiliser le projet de la recette précédente, soit lancer un nouveau projet et l'appeler PersistentData (dans une application du monde réel, vous ferez probablement les deux de toute façon). Dans la recette précédente, nous avons sauvegardé mCounter dans l'état de la session. Dans cette recette, nous allons ajouter une nouvelle méthode pour gérer onPause () et enregistrer mCounter dans SharedPreferences. Nous allons restaurer la valeur dans onCreate ().

Comment faire...
Nous avons seulement deux changements à faire, et les deux sont dans MainActivity.java:
1. Ajoutez la méthode onPause () suivante pour enregistrer les données avant la fermeture de l'activité:
@Passer outre
void protégé onPause () {super.onPause ();
Paramètres SharedPreferences = getPreferences (
MODE_PRIVATE);
SharedPreferences.Editor editor = settings.edit (); editor.putInt (KEY_COUNTER, mCounter); editor.commit ();
}
2. Ajoutez ensuite le code suivant à la fin de onCreate () pour restaurer le compteur:
Paramètres SharedPreferences = getPreferences (MODE_PRIVATE);
int defaultCounter = 0;
mCounter = settings.getInt (KEY_COUNTER, defaultCounter);
3. Exécutez le programme et essayez-le.
-QD

Comment ça marche...
Comme vous pouvez le voir, ceci est très similaire à l'enregistrement de données d'état, car il utilise également des paires nom / valeur. Ici, nous avons juste stocké un int, mais nous pouvons tout aussi bien stocker l'un des autres types de données primitifs. Chaque type de données a des getters et setters équivalents, par exemple,
SharedPreferences.getBoolean () ou SharedPreferences.setString ().
L'enregistrement de nos données nécessite les services de SharedPreferences.Editor. Ceci est évoqué avec edit () et accepte les procédures remove () et clear () ainsi que les setters tels que putInt (). Notez que nous devons conclure tout stockage que nous faisons ici avec l'instruction commit ().

Il y a plus...
Il existe une variante légèrement plus sophistiquée de l'accesseur getPreferences (): getSharedPreferences (). Il peut être utilisé pour stocker plusieurs ensembles de préférences.

Utiliser plus d'un fichier de préférences
L'utilisation de getSharedPreferences () n'est pas différente de l'utilisation de son homologue, mais autorise plus d'un fichier de préférences. Il prend la forme suivante:
getSharedPreferences (nom de la chaîne, mode int)
Ici, le nom est le fichier. Le mode peut être MODE_PRIVATE, MODE_WORLD_READABLE ou MODE WORLD WRITABLE et décrit les niveaux d'accès du fichier.
Voir également
► Chapitre 6, Utilisation des données, pour plus d'exemples sur le stockage de données