2010-03-23 3 views
0

Je suis bloqué à un moment où j'essaie de faire lire à mon projet une valeur de préférence (à partir d'une liste ListPreference) et ensuite utiliser cette valeur dans une base mathématique instance de soustraction. Le problème est que la préférence "seek" n'est pas vue par mon code Java, et pourtant la valeur par défaut est (j'ai essayé la valeur par défaut avec 3000 et maintenant 0). Ai-je raté quelque chose, y a-t-il un bug ici, connu ou inconnu?getSharedPreferences ne fonctionne pas pour moi avec des problèmes à ListPreferences et Integers

Voici mon code Java morceau où les problèmes se manifestent:

public static final String PREF_FILE_NAME = "preferences"; 
seekback.setOnClickListener(new Button.OnClickListener() { 
@Override 
public void onClick(View view) { 
try { 
SharedPreferences preferences = getSharedPreferences(PREF_FILE_NAME, MODE_PRIVATE); 
Integer storedPreference = preferences.getInt("seek", 0); 

(mediaPlayer.getCurrentPosition()-storedPreference); 

} catch (Exception e) { 
e.printStackTrace(); 
} 
} 
}); 

Voici quelques autres bits de code pour mon projet:

À partir du fichier de préférences:

<ListPreference 
android:entries="@array/seconds" 
android:entryValues="@array/seconds_values" 
android:summary="sets the seek interval for the seekback and seekforward buttons" 
android:title="Seek Interval" 
android:defaultValue="5000" 
android:key="@string/seek"> 
</ListPreference> 

à partir de chaînes fichier:

<string name="seek">seek</string> 

A partir d'un fichier de tableau:

<resources> 
    <string-array 
     name="seconds"> 
     <item>Five seconds</item> 
     <item>Fifteen seconds</item> 
     <item>Thirty seconds</item> 
     <item>Sixty seconds</item> 
    </string-array> 
    <string-array 
     name="seconds_values"> 
     <item>5000</item> 
     <item>15000</item> 
     <item>30000</item> 
     <item>60000</item> 
    </string-array> 
</resources> 

laissez-moi savoir si vous avez besoin de voir plus de code pour comprendre cela

Merci d'avance pour toute aide qui peut être offert. J'ai travaillé sur ce problème pendant quelques heures et je suis brûlé, une deuxième paire d'yeux serait très appréciée.

Répondre

0

Assurez-vous de stocker les valeurs ListPreference dans les mêmes fichiers. Lancez le adb sur le cd /data/data/com.your.package et recherchez les dossiers et fichiers de préférences de type.

Je pense que le bug est que vous spécifiez un fichier différent de celui du réglage a été enregistré aussi:

Essayez de changer ceci:

SharedPreferences preferences = getSharedPreferences(PREF_FILE_NAME, MODE_PRIVATE); 

à

SharedPreferences preferences = PreferenceManager 
       .getDefaultSharedPreferences(context); 
+0

Merci pour votre contribution, s'il vous plaît nu avec moi. J'ai changé à Preferences SharedPreferences = PreferenceManager .getDefaultSharedPreference (getBaseContext()); Cependant, je débogue directement sur un téléphone. Je vois le chemin de mon projet, mais c'est à F: \ data \ com.mypackage et tout ce que je vois est le seul fichier qui devrait écrire dans ce répertoire (qui fonctionne bien, à la fois en lecture et en écriture). Ps. J'ai monté le SD de mon téléphone, ce qui me donne une vue précise du chemin ou dois-je suivre la route ADB comme vous l'avez noté ici? Merci encore pour votre aide. – user227604

+0

Vous allez bien, vérifiez le fichier pref et ouvrez dans un éditeur, et vérifiez si la clé existe et détient la valeur correcte. – Pentium10

+0

Il ressemble à la valeur sérialisé correctement. Je l'ai ouvert dans EditPlus 3 et voir android: key = "@ string/seek". C'est aussi dans le répertoire res/xml. – user227604

2

Je J'ai résolu ce problème. Il s'avère que mon projet a été nommé avec un caractère "_" et une fois que j'ai refactoré le trait de soulignement (et utilisé l'option getDefaultSharedPreferences), tout fonctionne comme il se doit.

Ce numéro a absorbé 30 heures de mon temps!

Questions connexes