mercredi 18 mai 2011

Mecanisme de persistance des données par Preference

Petit billet à destination des developpeurs qui cherchent à sauvegarder l'état d'une activité sans vouloir pour autant mettre en place un mécanisme compliqué comme une base de donnée embarquée (comme sqlite).

La documentation officielle est assez pauvre en exemple, j'espere que les quelques lignes ci-dessous pourront vous aider.


Google met à disposition des développeurs plusieurs solutions à travers les API Android:
  • L'objet Bundle,
  • le mécanisme des préférences
  • et (solution exclue pour aujourd'hui) la base de donnée intégrée.
La solution la plus simple celle du Bundle consiste à implémenter la méthode onSaveInstanceState. Cette méthode de la classe mère Activity en apparence simple pose pas mal de problemes. Cette méthode n'est pas systématiquement appelé et des pertes d'informations (non sauvegardées peuvent avoir lieu).

Une solution simple  à mettre en place est d'utiliser le mécanisme des préférences pour une persistance gérée nativement par Android.

Vous trouverez ci dessous un code fonctionnel permettant de voir concrètement comment gérer l'objet (SharedPreferences ) permettant la sauvegarder et le restore des informations.





========================================

package com.pmedina.ballocation;
import android.content.SharedPreferences;
import android.preference.PreferenceManager;

/**
 * @author pmedina
 */
public class BalLocationActivity extends Activity {
      String adresse;  // valeur que nous voulons persister et retrouver après la reliance de l’application
      SharedPreferences shared =  null;
     
      @Override
      public void onCreate(final Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            // Restaure les valeurs sauvegardées lors de la derniere execution de l’appli
            shared = PreferenceManager.getDefaultSharedPreferences(this);
            adresse = restoreState("adresse");
             … faites vos traitements ici …
       Avant d’appeler un startActivity(…,…) pensez à appeler la fonction saveState() autant de fois que necessaire.
      }

      public void saveState(String key, String value) {
            SharedPreferences.Editor editor = null;
            editor = shared.edit(); // initialisation
            editor.putString(key, value);
            editor.commit();
      }
      public String restoreState(String key) {
            return shared.getString(key, "Saisissez une adresse");
      }
}

3 commentaires:

  1. pas trop clair,
    est ce que vous pouvez nous passer un petit démo, car ça fonctionne pas chez moi.

    RépondreSupprimer
  2. Bonjour,

    Le process est assez simple à mettre en place.
    Il faut créer un objet "SharedPreferences" en attribut de ton objet.

    SharedPreferences shared = null;

    dans ta méthode oncreate tu l'instancie:

    shared = PreferenceManager.getDefaultSharedPreferences(this);

    Pour persister des données, il faut créer un objet editor, l'alimenter et ne pas oublier de le commiter.(méthode saveState(String key, String value))

    SharedPreferences.Editor editor = null;
    editor = shared.edit(); // initialisation
    editor.putString(key, value);
    editor.commit();



    La méthode restoreState(String key) permet à partir de la clé de retrouver la valeur que tu as persisté.

    Si ces explications ne sont pas suffisantes, je te ferais un petit projet Eclipse ce soir et je te l'envoi.

    Bonne journée,

    Pierre

    RépondreSupprimer
  3. Bobjour, c Très clair

    RépondreSupprimer