12

我想将 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]
4

6 回答 6

35

您有 2 个选择:

  1. 手动解析字符串并重新创建数组列表。这将是相当乏味的。
  2. 使用像 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);
    
于 2013-01-13T23:48:56.433 回答
3

试试这个

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

如果逗号用作分隔符并且没有任何项目具有它,这将起作用。

于 2013-01-14T00:19:21.513 回答
2

页面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)

也许会有所帮助。

于 2016-01-06T13:29:50.377 回答
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());
于 2018-06-11T10:21:26.403 回答
1

我最终使用:

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

不过,这不适用于所有数组类型。此选项不同于:

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

第二个选项创建一个不可变数组。

于 2013-01-15T21:55:20.057 回答
0

更新 Dhruv Gairola 对Kotlin的回答

val gson = Gson();
val jsonString = gson.toJson(arrayList) 
于 2018-10-09T08:00:39.863 回答