Dans toutes applications, il est souvent nécessaire d'utiliser des variables qui doivent être gardé en mémoire même suite à une fermeture. La solution des Shared Preferences est la plus simple a implémenté.
Il existe différente façon de sauvegarder des variables persistantes :
- Les Shared Preferences, qui sont le sujet de cette article.
- Le stockage interne, par exemple dans des fichiers
- Le stockage externe, par exemple sur une carte SD
- L'utilisation de base de donnée SQLite
- Le stockage sur le réseau
Shared Preferences
Cette classe est utile pour enregistrer les préférences de son application. En utilisant cette méthode, on ne peut stocker que des associations clé, valeur.
Utilisation
Un exemple d'utilisation tiré de la documentation officielle d'Android :
Consultation
On peut créer plusieurs ensembles de préférences qui sont définit par un nom. Pour récupérer un ensemble de préférence on peut utilisé :
- getSharedPreferences (String name, int mode), si on possède plusieurs ensemble de préférence.
- getPreferences (int mode), si on possède un seul ensemble sans nom.
Ses deux méthodes doivent être appelé depuis le Context de l'application : getApplicationContext()
Le paramètre mode peut prendre plusieurs valeurs : MODE_PRIVATE, MODE_WORLD_READABLE, MODE_WORLD_WRITEABLE, MODE_MULTI_PROCESS. Par défaut, on donne 0 qui correspond à MODE_PRIVATE.
Ses deux fonctions nous retournent un objet SharedPreferences. Les fonctions de cette objet :
- getAll(), retourne l'ensemble des valeurs de l'objet dans un objet type Map<String, "value">
- getBoolean(String key, boolean defValue), qui retourne le booléen stocké sous le nom donné
- getFloat(String key, float defValue), qui retourne le float stocké sous le nom donné
- getInt(String key, int defValue), qui retourne l'int stocké sous le nom donné
- getLong(String key, long defValue), qui retourne le long stocké sous le nom donné
- getString(String key, String defValue), qui retourne la chaine de caractère stockée sous le nom donné
- getStringSet(String key, Set<String> defValues), retourne un ensemble de chaine de caractère sous un objet de type Set<String>
- registerOnSharedPreferenceChangeListener(SharedPreferences.OnSharedPreferenceChangeListener listener), enregistre un callback appelé dés qu'une modification a lieu au préférence
- unregisterOnSharedPreferenceChangeListener(SharedPreferences.OnSharedPreferenceChangeListener listener), enlève le callback enregistré
- contains(String key), vérifie l'existence d'une clé
Le paramètre defValue est retourné si aucune valeur existe.
Edition
Pour éditer les préférences, il faut appelé la méthode edit() de l'objet SharedPreferences. Cette fonction nous retourne un objet de type SharedPreferences.Editor. Les fonctions disponibles :
- apply(), enregistre les valeurs modifiées sans informé si un échec a lieu
- clear(), vide toutes les valeurs de préférence enregistrées
- commit(), enregistre les valeurs modifiées mais retourne si la mise à jour est réussite ou non
- putBoolean(String key, boolean defValue), enregistre un booléen sous le nom donné
- putFloat(String key, float defValue), enregistre un float sous le nom donné
- putInt(String key, int defValue), enregistre un int sous le nom donné
- putLong(String key, long defValue), enregistre un long sous le nom donné
- putString(String key, String defValue), enregistre une chaine de caractère sous le nom donné
- putStringSet(String key, Set<String> defValues), enregistre un ensemble de chaine de caractère sous un objet de type Set<String>
- remove(String key), supprime un ensemble clé/valeur des préférences
Pour que toute modification soit enregistrer, ne pas oublié d'appeler les méthode apply() ou commit().
Pour finir
L'utilisation des SharedPreferences est finalement quelque chose de simple à mettre en place et à utiliser une fois que l'on sait les points particuliers. Un exemple est présent sur le site qui permet d'illustrer son utilisation dans une application :
Fin du projet ListViewJson (Bar Action, Préférence, ListView)
A noté que les exemples ci-dessus proviennent de la document officielle d'Android.