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. オブジェクトを 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);
    
于 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 に答える
1

私は最終的に以下を使用しました:

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

ただし、これはすべての配列タイプで機能するわけではありません。このオプションは次のものとは異なります。

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

その上で、2番目のオプションは不変の配列を作成します。

于 2013-01-15T21:55:20.057 に答える