我想将一个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]
答案 0 :(得分:32)
您有两个选择:
使用Google的Gson库之类的JSON库来存储和检索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);
答案 1 :(得分:3)
试试这个
ArrayList<String> array = Arrays.asList(arrayString.split(","))
如果将逗号用作分隔符并且没有任何项目具有它,则此方法将起作用。
答案 2 :(得分:1)
我最终使用了:
ArrayList<String> appList = new ArrayList<String>(Arrays.asList(appsString.split("\\s*,\\s*")));
但这并不适用于所有数组类型。此选项不同于:
ArrayList<String> array = Arrays.asList(arrayString.split(","));
,第二个选项创建一个不可变数组。
答案 3 :(得分:1)
页面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)
也许会有所帮助。
答案 4 :(得分:1)
//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());
答案 5 :(得分:0)
更新为Dhruv Gairola对科特林
的回答
val gson = Gson();
val jsonString = gson.toJson(arrayList)