Java конвертирует ArrayList в строку и обратно в ArrayList?

Я хотел сохранить ArrayList в SharedPreferences, поэтому мне нужно превратить его в строку и обратно, это то, что я делаю:

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

Я могу получить его с помощью String arrayString = sharedPref.getString("yourKey", null);, но я не знаю, как преобразовать arrayString в ArrayList. Как это можно сделать?


Мой массив выглядит примерно так:

[item1,item2,item3]

Ответ 1

У вас есть 2 варианта:

  • Вручную разберите строку и заново создайте arraylist. Это было бы довольно утомительно.
  • Используйте библиотеку JSON, такую ​​как Google Gson, чтобы хранить и извлекать объекты в виде строк JSON. Это легкая библиотека, хорошо расцененная и популярная. Это было бы идеальным решением в вашем случае с минимальной требуемой работой. например.

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

Ответ 2

Попробуйте это

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

Это будет работать, если запятая используется как разделитель, и ни один из элементов не имеет ее.

Ответ 3

В итоге я использовал:

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

Однако это не работает для всех типов массивов. Этот параметр отличается от:

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

на том, что вторая опция создает массив, который может быть изменен.

Ответ 5

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

Ответ 6

Обновление ответа Дхрува Гайролы для Котлина

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