2010-03-16 7 views
0

Mon problème est le suivant: J'ai un composant qui étend DialogPreference. Si je change la préférence associée à l'extérieur de l'interface utilisateur ...Préférences non enregistrées dans DialogPreference

SharedPreferences.Editor ed= sharedPreferences.Edit(); 
ed.putInteger("Setting",aValue); 
ed.commit(); 

... puis, quand j'ouvre la boîte de dialogue de la préférence sélectionnée n'a pas changé. Même si la valeur de préférence partagée est modifiée, elle contient toujours la valeur définie précédemment.

Quelqu'un a-t-il une idée de ce qui pourrait être la cause?

+0

Comment lisez-vous cela? – Macarse

+0

comme ceci: int value = sharedPref.getInt ("settingKey", -1) –

+0

parce que vous enregistrez sous "Setting" et en obtenant "settingKey". Besoin d'utiliser la même clé pour enregistrer et récupérer – MobileMon

Répondre

0

Cela a probablement été résolu il y a longtemps, mais juste au cas où ....

Quelques idées pour des choses qui pourraient être à l'origine du problème:

  • Les « SharedPreferences » vous écrivez votre La valeur dans peut ne pas être la même que vous lisez. Vous pouvez tester cela en récupérant la valeur dans SharedPreferences et en l'imprimant (sur le journal ou via un toast) juste après avoir appelé commit() dans la boîte de dialogue. Si vous voyez la variable modifiée, vous pouvez en fait ouvrir un nouveau 'SharedPreferences' dans la boîte de dialogue, ou

  • Vous pouvez réécrire la valeur par défaut après votre boîte de dialogue. Par exemple, IF onResume() ou une autre fonction est appelée juste après la fermeture de la boîte de dialogue et si la valeur par défaut y est écrite. Je pense que c'est peu probable, mais pourrait être quelque chose d'autre à considérer si vous êtes sûr que vous écrivez à la bonne 'SharedPreferences'. La fonction que vous utilisez lorsque vous écrivez la variable peut être fausse .... Il n'est pas clair pour moi comment cela pourrait ne pas être détecté par le compilateur ou ne pas échouer autrement, mais comme je le vois dans la documentation de SharedPreferences .Editeur, la fonction d'écriture d'une valeur entière pourrait être putInt (String key, int value) au lieu de putInteger (String key, int value).

  • Vous pouvez lire ou écrire la mauvaise variable ... Cela peut arriver si vous avez copié-collé la commande putInt et laissé la mauvaise clé ou la mauvaise valeur. C'est le genre d'erreur qui n'est pas détectée depuis longtemps, mais ça ... Je suppose que ça arrive. Une erreur avec un effet similaire serait d'avoir une faute de frappe sur la touche (deux touches différentes pour lire et écrire).

    Sans le code réel, je pense qu'il n'y a pas grand-chose de plus que je puisse suggérer ... Mais j'espère que cela peut aider d'une manière ou d'une autre à répondre à cette question.

    Cordialement.

Questions connexes