2013-02-20 8 views
0

J'ai plusieurs SharedPreferences qui stockent chacun une valeur int chacun. J'ai déjà créé plusieurs fois SharedPreferences, mais j'essaie une approche légèrement différente pour celle-ci. Je ne garde que les 5 valeurs les plus élevées. Je reçois chaque valeur de SharedPreference, puis j'ajoute les 5 valeurs + la valeur actuelle que je veux comparer aux autres dans un ArrayList. J'appelle la méthode de tri inverse, puis je supprime la dernière valeur (parce qu'elle est extra). Je mets alors chaque index dans l'éditeur du SharedPreferences. Voici ce que j'ai:Android: SharedPreferences Problème (Multiple SharedPreferences)

prefs1 = this.getSharedPreferences("key1", Context.MODE_PRIVATE); 
int value1 = prefs1.getInt("number1", 0); 

prefs2 = this.getSharedPreferences("key2", Context.MODE_PRIVATE); 
int value2 = prefs2.getInt("number2", 0); 

prefs3 = this.getSharedPreferences("key3", Context.MODE_PRIVATE); 
int value3 = prefs3.getInt("number3", 0); 

prefs4 = this.getSharedPreferences("key4", Context.MODE_PRIVATE); 
int value4 = prefs4.getInt("number4", 0); 

prefs5 = this.getSharedPreferences("key5", Context.MODE_PRIVATE); 
int value5 = prefs5.getInt("number5", 0); 

ArrayList<Integer> numList = new ArrayList<Integer>(); 
Collections.addAll(numList, value0, value1, value2, value3, value4, value5); 
Collections.sort(numList, Collections.reverseOrder()); 
numList.remove(numList.size()-1); 
value1 = numList.get(0); 
value2 = numList.get(1); 
value3 = numList.get(2); 
value4 = numList.get(3); 
value5 = numList.get(4); 

Editor editor = prefs1.edit(); 
editor.putInt("number1", value1); 
editor.commit(); 

editor = prefs2.edit(); 
editor.putInt("number2", value2); 
editor.commit(); 

editor = prefs3.edit(); 
editor.putInt("number3", value3); 
editor.commit(); 

editor = prefs4.edit(); 
editor.putInt("number4", value4); 
editor.commit(); 

editor = prefs5.edit(); 
editor.putInt("number5", value5); 
editor.commit(); 

Le problème que j'ai est qui montre 0s pour chacune des valeurs dans mon autre activité, même après value0 est positif après exécuté par.

Y a-t-il quelque chose qui ne va pas dans ce que je fais? (Dans le cas contraire il doit être quand je reçois ces valeurs dans une autre activité, mais je suis j'ai presque certain que le droit.)

EDIT *

Peut-être qu'il est dans la récupération, voici de l'activité de récupération :

prefs1 = this.getSharedPreferences("key1", Context.MODE_PRIVATE); 
num1 = prefs1.getInt("number1", 0); //0 is the default value 
tv1 = (TextView) findViewById(R.id.val1); 
tv1.setText(String.valueOf(num1)); 

prefs2 = this.getSharedPreferences("key2", Context.MODE_PRIVATE); 
num2 = prefs2.getInt("number2", 0); //0 is the default value 
tv2 = (TextView) findViewById(R.id.val2); 
tv2.setText(String.valueOf(num2)); 

prefs3 = this.getSharedPreferences("key3", Context.MODE_PRIVATE); 
num3 = prefs3.getInt("number3", 0); //0 is the default value 
tv3 = (TextView) findViewById(R.id.val3); 
tv3.setText(String.valueOf(num3)); 

prefs4 = this.getSharedPreferences("key4", Context.MODE_PRIVATE); 
num4 = prefs4.getInt("number4", 0); //0 is the default value 
tv4 = (TextView) findViewById(R.id.val4); 
tv4.setText(String.valueOf(num4)); 

prefs5 = this.getSharedPreferences("key5", Context.MODE_PRIVATE); 
num5 = prefs5.getInt("number5", 0); //0 is the default value 
tv5 = (TextView) findViewById(R.id.val5); 
tv5.setText(String.valueOf(num5)); 
+1

Ne pas critiquer, juste curieux. –

+0

@DanielSmith Je ne conserve que 5 valeurs, il est donc plus facile de le faire que de créer une base de données pour seulement 5 valeurs. –

+0

Ou ayez une préférence partagée et conservez 5 valeurs. – wtsang02

Répondre

4

vous pouvez penser à SharedPreferences comme une carte géante pour tous vos trucs, mais à moins que vous faites quoi que ce soit génial, vous devriez stocker et récupérer des données à partir de la même carte géant (le même) de SharedPreferences. Ce que vous faites, c'est créer des préférences partagées nommées. Je recommanderais simplement d'utiliser la valeur par défaut. Si vous êtes curieux d'en savoir plus sur ce que cela signifie check out this question.

Donc, dans votre cas si vous stockez 5 valeurs, vous pouvez le faire dans le même SharedPreferences simplement en fournissant différentes touches comme suit:

SharedPreferences mSharedPreferences = PreferenceManager.getDefaultSharedPreferences(getApplicationContext()); 
SharedPreferences.Editor mSharedPreferencesEditor = mSharedPreferences.edit(); 

mSharedPreferencesEditor.putInt("numberX", numberX); 
mSharedPreferencesEditor.putInt("numberY", numberY); 
mSharedPreferencesEditor.commit() 

mSharedPreferences.getInt("numberX", numberX); 
mSharedPreferences.getInt("numberY", numberY); 

Vous pouvez facilement get et put avec différentes clés dans les mêmes sharedPrefs. Votre code deviendrait:

SharedPreferences mSharedPreferences = PreferenceManager.getDefaultSharedPreferences(getApplicationContext()); 
SharedPreferences.Editor mSharedPreferencesEditor = mSharedPreferences.edit(); 

int value1 = mSharedPreferences.getInt("number1", 0); 
int value2 = mSharedPreferences.getInt("number2", 0); 
int value3 = mSharedPreferences.getInt("number3", 0); 
int value4 = mSharedPreferences.getInt("number4", 0); 
int value5 = mSharedPreferences.getInt("number5", 0); 

... 

mSharedPreferencesEditor.putInt("number1", value1); 
mSharedPreferencesEditor.putInt("number2", value2); 
mSharedPreferencesEditor.putInt("number3", value3); 
mSharedPreferencesEditor.putInt("number4", value4); 
mSharedPreferencesEditor.putInt("number5", value5); 
mSharedPreferencesEditor.commit(); 

Votre question concernant toutes vos valeurs étant 0 peuvent être différents. Je m'attendrais à ce que tous vos appels à getInt soient 0 car vous êtes jamais en stockant autre chose que 0 dans les sharedPrefs. Il semble que vous ajoutez simplement des zéros et des zéros. Je ne suis pas sûr de ce que vous essayez de faire ici, mais cela aiderait à, à un moment donné avant d'appeler cette fonction, affecter les numéros 1-5 à autre chose que 0 en appelant mSharedPreferencesEditor.putInt(number); sur un objet sharedPrefs comme suit:

Pourquoi avez-vous besoin de plusieurs préférences partagées?
SharedPreferences mSharedPreferences = PreferenceManager.getDefaultSharedPreferences(getApplicationContext()); 
SharedPreferences.Editor mSharedPreferencesEditor = mSharedPreferences.edit(); 

//for example, for the key "number5" 
mSharedPreferencesEditor.putInt("number5", value5); 
+0

value0 est différent de zéro. Donc, il y a toujours au moins une valeur qui n'est pas égale à 0. Quand je l'ai testé, j'ai vérifié que value0 était positif (c'est-à-dire> 0). –

+0

Comment le PreferencesEditor est-il déclaré? –

+0

J'ai ajouté les déclarations à mon code ci-dessus. Cela aide-t-il à les déclarer? –