Sauvegarder des éléments – SharedPreferences
Introduction
Sous android, il est fréquent de vouloir sauvegarder un élément, par exemple le nom de l’utilisateur connecté, ou par exemple une liste de string. Nous avons dans ce cas plusieurs méthodes :
- SharedPreferences
- Ecrire dans un fichier
- Sauvegarder dans une base de données
Je ne vais pas rentrer dans le détail des 3 méthodes, qui ont chacun leurs avantages et inconvénients. On va se concentrer aujourd’hui sur les SharedPreferences.
SharedPreferences
Les SharedPreferences sont des espaces de stockages propres à chaque application Android. Avec un système de clé/valeur, vous pourrez persister vos données facilement.
Création
Les SharedPreferences sont à récupérer depuis un context, avec context.getSharedPreferences(NAME,MODE)
context.getSharedPreferences("user_prefs",Context.MODE_PRIVATE);
Sauvegarde
Afin de sauvegarder un élémént, vous devez ouvrir un éditeur, avec sharedPreferences.edit(), vous aurez ensuite accès à toutes les méthodes .putString(KEY,VALUE), .putInt(KEY,VALUE), etc.
Une fois vos objets insérés, n’oubliez pas d’appeler la méthode .apply()
sharedPreferences .edit() .putInt("cle_integer", 3) .putString("cle_string", "monString") .apply();
Récupération
La récupération d’un élémént persisté se fait avec les méthodes .getString(KEY,DEFAULT_VALUE), .getInt(KEY,DEFAULT_VALUE), etc.
Vous pouvez vérifier la présence d’un élément avec .containsKey(KEY)
int myInteger = sharedPreferences.getInt("cle_integer", 0); String myString = sharedPreferences.getString("cle_string", null)
Exemple complet
Dans cet exemple, je vais montrer comment sauvegarder une seule fois un élément, puis le charger au prochain démarrage de l’application :
public class MainActivity extends AppCompatActivity { private static final String PREFS = "PREFS"; private static final String PREFS_AGE = "PREFS_AGE"; private static final String PREFS_NAME = "PREFS_NAME"; SharedPreferences sharedPreferences; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); sharedPreferences = getBaseContext().getSharedPreferences(PREFS, MODE_PRIVATE); //objectif : sauvegarder 1 seule fois le nom et l'age de l'utilisateur //pour cela, on commence par regarder si on a déjà des éléments sauvegardés if (sharedPreferences.contains(PREFS_AGE) && sharedPreferences.contains(PREFS_NAME)) { int age = sharedPreferences.getInt(PREFS_AGE, 0); String name = sharedPreferences.getString(PREFS_NAME, null); Toast.makeText(this, "Age: " + age + " name: " + name, Toast.LENGTH_SHORT).show(); } else { //si aucun utilisateur n'est sauvegardé, on ajouter [24,florent] sharedPreferences .edit() .putInt(PREFS_AGE, 24) .putString(PREFS_NAME, "florent") .apply(); Toast.makeText(this, "Sauvegardé, relancez l'application pour voir le résultat", Toast.LENGTH_SHORT).show(); } } }
Les sources de ce tuto sont disponibles sur github
Bonjour et Merci pour ce tuto, Je voudrais savoir s’il était possible de sauvegarder plusieurs éléments les un à la suite des autres et pas au même moments ???