Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Storing a String array in the SharedPreferences

I was wondering if it could be possible to save in the shared preferences an array of Strings, in a way that, every time we save a certain String, we store it in that array.

For example I have a list of locations with a certain ID that I want to mark as favorite. The ideal situation would be, having an array and saving a certain location ID (let's call it Location1) in that array, so next time I want to mark a new location as favorite (let's call it Location2), I retrieve that array (which so far contains Location1) and add the ID of this new location I want to add (Location2).

Android has methods to store primitive objects, but not for arrays. Any idea in order to do this, please?

like image 473
noloman Avatar asked May 30 '12 09:05

noloman


2 Answers

This is doable: I was just blogging about it:

SAVE YOUR ARRAY

//String array[]
//SharedPreferences prefs
Editor edit = prefs.edit();
edit.putInt("array_size", array.length);
for(int i=0;i<array.length; i++)
    edit.putString("array_" + i, array[i]);
edit.commit();

RETRIEVE YOUR ARRAY

int size = prefs.getInt("array_size", 0);
array = new String[size];
for(int i=0; i<size; i++)
    prefs.getString("array_" + i, null);

Just wrote that so there might be typos.

like image 54
Sherif elKhatib Avatar answered Sep 19 '22 10:09

Sherif elKhatib


You could make the array a JSON array and then store it like this:

SharedPreferences settings = getSharedPreferences("SETTINGS KEY", 0);
SharedPreferences.Editor editor = settings.edit();

JSONArray jArray = new JSONArray();
try {
    jArray.put(id);
} catch (JSONException e) {
    e.printStackTrace();
}

editor.putString("jArray", jArray.toString());
editor.commit();

You can then get the array like this:

SharedPreferences settings = getSharedPreferences("SETTINGS KEY", 0);
try {
    JSONArray jArray = new JSONArray(settings.getString("jArray", ""));
} catch (JSONException e) {
    e.printStackTrace();
}

Just an alternative solution that I have used in the past

like image 25
beenjaminnn Avatar answered Sep 18 '22 10:09

beenjaminnn