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");
      }
}

Applications dans le magazine "Mobiles Magazine" - Les meilleurres Applis

Le mois dernier c'était dans Mobile Passion. Ce mois ci j'ai deux de mes applications qui paraissent dans le magazine:  Mobiles Magazine.
Ces applications sont :
Un grand merci à Laurent (webmaster du site android-software.fr) pour avoir sélectionné mes applications.