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

Un commentaire sur “Sauvegarder des éléments – SharedPreferences

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *