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(","));
на том, что вторая опция создает массив, который может быть изменен.
Ответ 4
Страница http://mjiayou.com/2015/07/22/exception-gson-internal-cannot-be-cast-to/ содержит следующее:
Type type = new TypeToken<List<T>>(){}.getType();
List<T> list = gson.fromJson(jsonString, type)
возможно, это будет полезно.
Ответ 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)