12

I wanted to save an ArrayList to SharedPreferences so I need to turn it into a string and back, this is what I am doing:

// Save to shared preferences
SharedPreferences sharedPref = this.getPreferences(Activity.MODE_PRIVATE);
SharedPreferences.Editor editor = this.getPreferences(Activity.MODE_PRIVATE).edit();
editor.putString("myAppsArr", myAppsArr.toString());
editor.commit();

I can retrieve it with String arrayString = sharedPref.getString("yourKey", null); but I don't know how to convert arrayString back into an ArrayList. How can it be done?


My array looks something like:

[item1,item2,item3]

6 Answers 6

35
+50

You have 2 choices :

  1. Manually parse the string and recreate the arraylist. This would be pretty tedious.
  2. Use a JSON library like Google's Gson library to store and retrieve objects as JSON strings. This is a lightweight library, well regarded and popular. It would be an ideal solution in your case with minimal work required. e.g.,

    // How to store JSON string
    Gson gson = new Gson();
    // This can be any object. Does not have to be an arraylist.
    String json = gson.toJson(myAppsArr);
    
    // How to retrieve your Java object back from the string
    Gson gson = new Gson();
    DataObject obj = gson.fromJson(arrayString, ArrayList.class);
    
Sign up to request clarification or add additional context in comments.

3 Comments

I changed the array elements to strings, I'm sure it must be a lot easier now.
It doesn't matter. With Gson, you can convert any java object to a string and then convert it back. So even if you have an arraylist of custom objects, there's no problem.
Does it work for ArrayList<SomeCustomObject> with gson.fromJson(arrayString, ArrayList.class)?
3

Try this

ArrayList<String> array = Arrays.asList(arrayString.split(","))

This will work if comma is used as separator and none of the items have it.

Comments

2

The page http://mjiayou.com/2015/07/22/exception-gson-internal-cannot-be-cast-to/ contains the following:

Type     type  = new TypeToken<List<T>>(){}.getType();
List<T>  list  = gson.fromJson(jsonString, type)

perhaps it will be helpful.

Comments

2
      //arraylist convert into String using Gson 
      Gson gson = new Gson();
      String data = gson.toJson(myArrayList);
      Log.e(TAG, "json:" + gson);

      //String to ArrayList

      Gson gson = new Gson();
      arrayList=gson.fromJson(data, new TypeToken<List<Friends>>()
      {}.getType());

Comments

1

I ended up using:

ArrayList<String> appList = new ArrayList<String>(Arrays.asList(appsString.split("\\s*,\\s*")));

This doesn't work for all array types though. This option differs from:

ArrayList<String> array = Arrays.asList(arrayString.split(","));

on that the second option creates an inmutable array.

Comments

0

Update to Dhruv Gairola's answer for Kotlin

val gson = Gson();
val jsonString = gson.toJson(arrayList) 

Comments

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.