0

I have multiple SharedPreferences that are each storing one int value each. I have successfully created multiple SharedPreferences before, but I am trying a slightly different approach for this one. I am only keeping the highest 5 values. I am getting each value from its SharedPreference, then I am adding the 5 values + the current value I want to compare against the others in an ArrayList. I am calling the reverse sort method on it, then I am removing the last value (because it is extra). I am then putting each index into the editor of the SharedPreferences. Here is what I have:

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();

The problem I am having is that is showing 0s for each one of the values in my other activity even after value0 is positive after it executed through.

Is there anything wrong with how I am doing this? (If not then it must be when I get these values in another activity, but I am almost positive I have that right.)

EDIT*

Perhaps it is in the retrieval, here is from the retrieving activity:

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));
11
  • 1
    why do you need to have multiple shared preferences? Not criticizing, just curious. Commented Feb 20, 2013 at 2:27
  • @DanielSmith I am only keeping 5 values, so it is easier to do it this way than create a database for only 5 values. Commented Feb 20, 2013 at 2:28
  • Or have one shared preferences and keep 5 values. Commented Feb 20, 2013 at 2:30
  • @wtsang02 If you would like to provide a solution with what you have suggested (including storing/retrieval of each value) then I am all ears. I am doing it the way I know how to through teaching myself. I have no idea how to create a database (I do not understand the tutorials) and like I said, a database is overkill for this purpose (in my opinion, but I am not an expert). Commented Feb 20, 2013 at 2:33
  • 1
    try simplifying your code to not use all these extra sharedprefs and it may be easier to find your bug. Commented Feb 20, 2013 at 2:50

1 Answer 1

4

You can think of SharedPreferences like a giant map for all your stuff, but unless you are doing anything funky, you should store and retrieve data from the same giant map (i.e. the same SharedPreferences). What you are doing is creating named shared preferences. I would recommend just using the default. If you are curious to learn more about what that means check out this question.

So, in your case if you are storing 5 values, you can do so within the same SharedPreferences by just supplying different keys as follows:

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);

You can easily get and put with different keys into the same sharedPrefs. Your code would become:

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();

Your issue concerning all your values being 0 may be different. I would fully expect all your calls to getInt to be 0 because you are never storing anything but 0 in the sharedPrefs. It looks like you are just adding zeros and putting zeros. I am not sure what you are trying to do here, but it sure would help to, at some point before calling this function, assign numbers 1-5 to something other than 0 by calling mSharedPreferencesEditor.putInt(number); on a sharedPrefs object like so:

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

//for example, for the key "number5"
mSharedPreferencesEditor.putInt("number5", value5);
Sign up to request clarification or add additional context in comments.

3 Comments

value0 is non-zero. So there is always at least one value that is not equal to 0. When I tested it, I made sure that value0 was positive (i.e. > 0).
How are the PreferencesEditor and stuff declared?
i have added the declarations to my code above. Does that help with declaring them?

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.