IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Android Discussion :

sharedpreferences en défaut


Sujet :

Android

  1. #1
    Membre habitué
    Profil pro
    Développeur informatique
    Inscrit en
    Février 2008
    Messages
    289
    Détails du profil
    Informations personnelles :
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Février 2008
    Messages : 289
    Points : 151
    Points
    151
    Par défaut sharedpreferences en défaut
    bonjour,
    j'ai besoin de mémoriser le résultat d'un calcul afficher dans un TextView pour l'utiliser dans d'autres activités. Dans un premier temps j'utilise une SharedPreferences dans un petit test pour comprendre comment cela fonctionne.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
     
    public class MainActivity extends AppCompatActivity implements View.OnClickListener {
        private Button btn_store = null;
        private Button btn_restore = null;
        private Button btn_clear = null;
        private EditText txt_data = null;
        private static String DATA = "0";    //avec null ou "" c'est idem
        private SharedPreferences preference = null;
        SharedPreferences.Editor editor = null;
     
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
     
            txt_data = (EditText)findViewById(R.id.editText_data);
            btn_store = (Button)findViewById(R.id.button_store);
            btn_clear = (Button)findViewById(R.id.button_clear);
            btn_restore = (Button)findViewById(R.id.button_restore);
            btn_store.setOnClickListener(this);
            btn_restore.setOnClickListener(this);
            btn_clear.setOnClickListener(this);
        }
     
        @Override
        public void onClick(View v)
        {
            switch (v.getId())
            {
                case R.id.button_store:
                    String val = txt_data.getText().toString();
                    preference = PreferenceManager.getDefaultSharedPreferences(this);
                    editor = preference.edit();
                    editor.putString(DATA, val);
                    editor.commit();
                    break;
     
                case R.id.button_restore:
                    preference = PreferenceManager.getDefaultSharedPreferences(this);
                    SharedPreferences.Editor editor1 = preference.edit();
                    String data = preference.getString(DATA, "Vide");
                    editor1.commit();
                    txt_data.setText(data);
                    break;
     
                case R.id.button_clear:
                    txt_data.setText("");
                    break;
            }
        }
    }
    Le bouton store me permet de lire et stocker le contenu du TextView. Le bouton clear efface le TextView et le bouton restore relit la sharedPreferences et l'affiche dans la TextView.
    Ce scénario fonctionne correctement sauf si j'utilise le bouton restore en premier ce qui provoque l'erreur:
    getSharedPreferences
    org.xmlpull.v1.XmlPullParserException: Map value without name attribute: string

    Il y a des pistes sur le net mais aucune n'a résolu mon pb. Y a-t-il une solution ou ce que j'écris n'a-t-il pas de sens ou est-ce mal écrit ou bien ...

    Merci

  2. #2
    Modérateur
    Avatar de MasterMbg
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2011
    Messages
    719
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Congo-Kinshasa

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2011
    Messages : 719
    Points : 1 493
    Points
    1 493
    Par défaut
    Salut,

    Pour stocker ta valeur, tu as besoin d'une instance de SharedPreferences et tu peux l'obtenir en faisant depuis ton activity:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SharedPreferences pref = getSharedPreferences("pref_mon_app", Context.MODE_PRIVATE);
    Avec :
    • pref_mon_app : le nom que tu donnes au fichier qui sera créé afin de stocker tes pairs clé-valeur
    • Context.MODE_PRIVATE : le mode de stockage (Si je peux l'appeler ainsi)

    De là, tu peux enregistrer dans ce fichier tes données en attribuant une clé à chacune, question de les retrouver de manière unique.
    Ensuite pour enregistrer dans ce fichier, tu feras :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    //Tu récupères un objet Editor avec quoi tu vas écrire tes données;
    SharedPreferences.Editor editor = pref.edit();
    //Tu écrits dans le fichier
    editor.putString("data", val);
    editor.commit();
    Enfin, pour récupérer plus tard la valeur stockée, tu dois une fois de plus récupérer une instance de SharedPreferences (n'oublie pas le nom que tu aurais donné au fichier)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    //récupérer une instance de SharedPreferences
    SharedPreferences pref = getSharedPreferences("pref_mon_app", Context.MODE_PRIVATE);
    //récupérer une valeur à partir de sa clé
    pref.getString(data, "");
    Et c'est tout!

    Et si on appliquait tout ça dans ton code...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
     
    public class MainActivity extends AppCompatActivity implements View.OnClickListener {
        private Button btn_store;
        private Button btn_restore;
        private Button btn_clea;
        private EditText txt_data;
        private static String DATA = "une _data";//Le nom de la clé à correspondre à la valeur à enregistrer
        private static String PREF_NAME= "pref_mon_app";//Le nom à donner au fichier qui sera créé par le système 
        private SharedPreferences preference;
        SharedPreferences.Editor editor;
     
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
     
            txt_data = (EditText)findViewById(R.id.editText_data);
            btn_store = (Button)findViewById(R.id.button_store);
            btn_clear = (Button)findViewById(R.id.button_clear);
            btn_restore = (Button)findViewById(R.id.button_restore);
            btn_store.setOnClickListener(this);
            btn_restore.setOnClickListener(this);
            btn_clear.setOnClickListener(this);
     
            //On récupère une fois pour toute une instance de sharedPreferences
            preference = getSharedPreferences(PREF_NAME, Context.MODE_PRIVATE);
            editor = preference.edit();
        }
     
        @Override
        public void onClick(View v)
        {
            switch (v.getId())
            {
                case R.id.button_store:
                    String val = txt_data.getText().toString();
                    editor.putString(DATA, val);
                    editor.commit();
                    break;
     
                case R.id.button_restore:
                    txt_data.setText(pref.getString(DATA, "Aucune valeur trouvée en mémoire!"););
                    break;
     
                case R.id.button_clear:
                    txt_data.setText("");
                    break;
            }
        }
    }

    Christian Djo,
    Plus tu apprends sérieusement, plus tu te rapproches d'un savoir noble. Une chose est certaine, les difficultés ne s'écarteront de ton chemin...

    Tu es nouveau dans le développement Android, la page des COURS est là pour te faciliter la vie
    Tu peux trouver la réponse à ta question dans la FAQ
    Retrouvez mon tutoriel sur la consommation des services web SOAP
    Pense à voter positivement en appuyant sur en bas à droite de la réponse qui t'a donné une piste de solution.

  3. #3
    Modérateur
    Avatar de grunk
    Homme Profil pro
    Lead dév - Architecte
    Inscrit en
    Août 2003
    Messages
    6 691
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Lead dév - Architecte
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2003
    Messages : 6 691
    Points : 20 222
    Points
    20 222
    Par défaut
    Si c'est juste stocker un résultat pour le passer entre activité sans besoin de survivre un arret de l'app les shared préférence n'ont pas d'intérêt.
    Une simple variable statique ou des intent entre activity suffisent.
    Pry Framework php5 | N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  4. #4
    Modérateur
    Avatar de MasterMbg
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2011
    Messages
    719
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Congo-Kinshasa

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2011
    Messages : 719
    Points : 1 493
    Points
    1 493
    Par défaut
    Citation Envoyé par grunk Voir le message
    Si c'est juste stocker un résultat pour le passer entre activité sans besoin de survivre un arret de l'app les shared préférence n'ont pas d'intérêt.
    Une simple variable statique ou des intent entre activity suffisent.
    Tout à fait d'accord avec grunk. Si c'est juste pour passer une valeur d'une activity à l'autre, utilise la méthode putExtra () de l'objet Intent qui lance la seconde activity.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     Intent intent = new Intent(this, activitySecondaire.class); 
    intent.putExtra(key, value);
    //Lancer l'activity...
    Ainsi, dans la seconde activity, tu liras la donnée comme suit (Dans la méthode onCreate par exemple)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    String value = getIntent().getExtras().getString(key)

    Christian Djo,
    Plus tu apprends sérieusement, plus tu te rapproches d'un savoir noble. Une chose est certaine, les difficultés ne s'écarteront de ton chemin...

    Tu es nouveau dans le développement Android, la page des COURS est là pour te faciliter la vie
    Tu peux trouver la réponse à ta question dans la FAQ
    Retrouvez mon tutoriel sur la consommation des services web SOAP
    Pense à voter positivement en appuyant sur en bas à droite de la réponse qui t'a donné une piste de solution.

  5. #5
    Membre habitué
    Profil pro
    Développeur informatique
    Inscrit en
    Février 2008
    Messages
    289
    Détails du profil
    Informations personnelles :
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Février 2008
    Messages : 289
    Points : 151
    Points
    151
    Par défaut
    bonjour et merci à tous les deux,
    ça fonctionne. J'ai besoin que ma donnée survive à la fin de mon appli donc j'explorais les préférences partagées.

    A+.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Unique + valeur par défaut
    Par ketalie dans le forum Outils
    Réponses: 4
    Dernier message: 02/07/2003, 15h29
  2. [TListBox] Selection par défaut
    Par Nuts07 dans le forum Composants VCL
    Réponses: 8
    Dernier message: 12/05/2003, 10h00
  3. Couleur de sélection par défaut
    Par sicard_51 dans le forum AWT/Swing
    Réponses: 2
    Dernier message: 20/04/2003, 23h35
  4. [SWING][FONT] choisir la police par défaut
    Par narmataru dans le forum AWT/Swing
    Réponses: 4
    Dernier message: 21/02/2003, 10h35
  5. Retour au mode texte par défaut
    Par coca dans le forum x86 16-bits
    Réponses: 6
    Dernier message: 12/12/2002, 17h22

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo