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));
lord_sneed
  • 794
  • 3
  • 12
  • 25
  • 1
    why do you need to have multiple shared preferences? Not criticizing, just curious. – Daniel Smith Feb 20 '13 at 02: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. – lord_sneed Feb 20 '13 at 02:28
  • Or have one shared preferences and keep 5 values. – wtsang02 Feb 20 '13 at 02: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). – lord_sneed Feb 20 '13 at 02:33
  • 1
    try simplifying your code to not use all these extra sharedprefs and it may be easier to find your bug. – Daniel Smith Feb 20 '13 at 02:50
  • u should do this by using one SharedPreference. by the way, have u check value1.....5, after updating them by numlist ? – Shoshi Feb 20 '13 at 02:53
  • You people are relentless about not using more than one SharedPreference. – lord_sneed Feb 20 '13 at 02:57
  • @Shoshi I have not checked the values, the default value is 0. value0 is positive so putting them all into an ArrayList and calling reverseOrder on them would put them in descending order. – lord_sneed Feb 20 '13 at 03:01
  • @lord_sneed : u should check them , for be sure is that really going well what u r thinking , (sorry for my bad english) – Shoshi Feb 20 '13 at 03:58
  • @Shoshi Yea it turns out that the way I was doing it was working. However, when I went to test, in order to shortcut the whole process, I assigned a value to where it would skip to where it would save the results in the SharedPreferences. Long story short, it turns out that value0 was actually 0....It has been a long day... – lord_sneed Feb 20 '13 at 04:12
  • @lord_sneed : congratulation. but i will recommend u to use 'Daniel Smith's approach (bellow in answer). u can use one sharedPreference rather than 5 individual SharedPreferences :) – Shoshi Feb 20 '13 at 04:55

1 Answers1

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);
Community
  • 1
  • 1
Daniel Smith
  • 8,561
  • 3
  • 35
  • 58