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 :

préférences inaccessibles dans mon activité


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 préférences inaccessibles dans mon activité
    bonjour,
    j'ai besoin de SharedPreferences pour stocker l'adresse IP d'un serveur. J'ai beaucoup lu ce qui tourne autour et dupliqué pas mal de code mais je n'arrive pas à stocker cette adresse IP.

    J'ai donc un layout via un PreferenceScreen stocké dans le fichier res/xml/preferences.xml:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    <?xml version="1.0" encoding="utf-8"?>
    <PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android">
        <EditTextPreference
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:key="ip"
            android:defaultValue="127.0.0.1" >
        </EditTextPreference>
    </PreferenceScreen>
    Je suppose qu'en l'état la paire clé/valeur est assurée par les attributs key/defaultValue.
    Une classe PreferencesActivity:
    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
     
    public class PreferencesActivity extends PreferenceActivity {
        private String KEY_PREF_IP = "ip";
        private String PREFS_NAME = "preferences";
     
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            addPreferencesFromResource(R.xml.preferences);
     
            SharedPreferences  settings = getSharedPreferences(PREFS_NAME, 0);
            String pref_ip = settings.getString(KEY_PREF_IP, "hello");
            System.out.println("pref_ip = " + pref_ip);
     
            SharedPreferences.Editor editor = settings.edit();
            editor.putString("0.0.0.0", KEY_PREF_IP);
            editor.commit();
     
            pref_ip = settings.getString(KEY_PREF_IP, "hello");
            Toast toast = Toast.makeText(this, pref_ip, Toast.LENGTH_SHORT);
            toast.show();
        }
    }
    Dans ma MainActivity j'ai inséré la ligne:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    PreferenceManager.setDefaultValues(this, R.xml.preferences, false);
    Je pensais voir dans un premier temps la valeur par défaut 127.0.0.1 puis 0.0.0.0 dans le toast mais j'ai systématiquement "hello"...
    Le commit se passe bien puisqu'il me retourne true.
    Comment savoir si c'est bien le fichier preferences.xml qui est accédé?
    Sinon, quoi t'est-ce qui dysfonctionne?

    Merci.

  2. #2
    Expert éminent

    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Février 2007
    Messages
    4 253
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Février 2007
    Messages : 4 253
    Points : 7 618
    Points
    7 618
    Billets dans le blog
    3
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    editor.putString("0.0.0.0", KEY_PREF_IP);
    Tu as inversé les paramètres....
    N'oubliez pas de cliquer sur mais aussi sur si un commentaire vous a été utile !
    Et surtout

  3. #3
    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
    Ahhh la honte!!
    Merci Nicroman,
    encore une question, quand est-ce que l'attribut defaultValue est associé à la clé?
    J'ai écrit ce code pour tester:
    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
     
    public class PreferencesActivity extends PreferenceActivity {
        private String KEY_PREF_IP = "ip";
        private String PREFS_NAME = "preferences";
     
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            addPreferencesFromResource(R.xml.preferences);
     
            PreferenceManager.setDefaultValues(this, R.xml.preferences, false);
            SharedPreferences previous = PreferenceManager.getDefaultSharedPreferences(this);
            String pref_Ip = previous.getString(KEY_PREF_IP, "hello");
            System.out.println("pref_Ip = " + pref_Ip);
            ....
    J'ai prouvé que je lisais mal la doc mais j'ai cru comprendre que setDefaultValues() initialisait les clés avec les valeurs par défaut si elles existent.
    Mais à l'affichage de pref_Ip, j'ai toujours 0 même pas de "hello".
    Que fais-je de travers ?
    Merci

  4. #4
    Expert éminent

    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Février 2007
    Messages
    4 253
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Février 2007
    Messages : 4 253
    Points : 7 618
    Points
    7 618
    Billets dans le blog
    3
    Par défaut
    Tu confonds les "defaultValues" des elements "graphiques" (EditText)
    Avec les "defaultValues" du fichier de preferences.

    Les deux n'ont pas de lien "à priori".
    N'oubliez pas de cliquer sur mais aussi sur si un commentaire vous a été utile !
    Et surtout

  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,
    merci pour cette réponse. Je commence à saisir les différences.
    Par contre, au final n'arrive toujours pas à sauvegarder mes préférences. J'ai écrit ce 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
     
    @Override
        public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) {
            Toast toast = Toast.makeText(this, "onSharedPreferenceChanged", Toast.LENGTH_SHORT);
            toast.show();
     
            if (key.equals(KEY_EDIT_TEXT_PREFERENCE)) {
                Preference preference = findPreference(key);
                if (preference instanceof EditTextPreference) {
                    SharedPreferences.Editor editor = sharedPreferences.edit();
                    EditTextPreference editTextPreference = (EditTextPreference) preference;
                    editor.putString(KEY_EDIT_TEXT_PREFERENCE, editTextPreference.getText());
                    editor.commit();
                    editTextPreference.setSummary(editTextPreference.getText());
     
                    toast = Toast.makeText(this, "updatePreference "+key+" to "+editTextPreference.getText(), Toast.LENGTH_SHORT);
                    toast.show();
                }
            }
        }
    Je rentre bien dans ce gestionnaire de changement quand la valeur de la clé qui m'intéresse est modifiée.
    Quand je reviens dans la PreferenceActivity qui le contient, je conserve toujours la valeur précédente comme si le commit() n'avait pas agit.

    Y a-t-il une erreur dans ce code?

    Merci.

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

Discussions similaires

  1. [Vxi3] Designer12.6 Fonctions Dates Inaccessibles dans mon univers
    Par jimtusa dans le forum Designer
    Réponses: 2
    Dernier message: 17/12/2016, 13h18
  2. Un fichier devenu inaccessible dans mon projet.
    Par Gualino dans le forum Visual Studio
    Réponses: 3
    Dernier message: 29/08/2011, 19h10
  3. [langage] algo de bissection dans mon code
    Par killy dans le forum Langage
    Réponses: 5
    Dernier message: 19/01/2004, 19h35
  4. Réponses: 7
    Dernier message: 26/06/2003, 10h11
  5. [] Utiliser AVI d'une DLL dans mon programme
    Par seb.49 dans le forum VB 6 et antérieur
    Réponses: 5
    Dernier message: 02/05/2003, 15h52

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