【问题标题】:How to save Arraylist of Objects from Fragment class into SharedPreferencess如何从 SharedPreferences 中的 Fragment 类中保存对象的 Arraylist
【发布时间】:2016-03-11 19:36:20
【问题描述】:

我在stackoverflow(LINKLINK)和其他websites中看到了类似的问题。他们从一个活动中做所有事情,因此他们没有遇到问题。

我有一个 Activity 和 Fragment 类。我正在尝试将 ArrayList of ObjectFragment 保存到 shared preferences 中。以下是我尝试过的

            SharedPreferences prefs = getActivity().getSharedPreferences("SHARED_PREFS_FILE", Context.MODE_PRIVATE);
            SharedPreferences.Editor editor = prefs.edit();
            try {
               editor.putString("taggedFriends",ObjectSerializer.serialize(taggableFriends));

            } catch (IOException e) {
                e.printStackTrace();

ObjectSerializer显示错误

**Cannot resolve symbom 'ObjectSerializer'** 

我试过了

getActivity.ObjectSerializer.serialize(..);

但错误并没有消失。帮帮我,我现在能做什么。

感谢您花时间陪伴我。

【问题讨论】:

  • 将其转换为json字符串并保存。比当您需要从 pref 访问读取并将 json 字符串转换为对象并使用时。您可以使用 gson 来转换 json
  • 你能在 Answer @savepopullation 中显示演示
  • 我发布了一个示例代码。

标签: android android-fragments sharedpreferences


【解决方案1】:

试试这个:

上次编辑:

在这种情况下:

 static class YourObject
{
    private String _name;

    public YourObject(String name)
    {
        this._name = name;  
    } 
}


YourObject yourObject = new YourObject(myName);
ArrayList<YourObject> foo = new ArrayList<YourObject>();
foo.add(yourObject);

将 ArrayList 转换为 JSONArray:

  JSONArray mJSONArray = new JSONArray(foo);

然后保存 JSONArray:

 SharedPreferences.Editor editor = prefs.edit();
 editor.putString("yourStringName", mJSONArray.toString());

字符串到 JSONArray:

SharedPreferences prefs = getSharedPreferences("SHARED_PREFS_FILE",   Context.MODE_PRIVATE);
String myJSONArrayString = prefs.getString("yourStringName", "");
JSONArray jsonArray = new JSONArray(myJSONArrayString);

JSONArray 到 ArrayList:

ArrayList<String> list = new ArrayList<String>();     
   for (int i=0;i<jsonArray.length();i++){ 
    list.add(jsonArray.get(i).toString());
   } 

我希望这能解决你的问题。

【讨论】:

  • 您使用的是 ArrayList 但我使用的是 ArrayList ,会不会导致任何问题 >
  • 谢谢,我试试看再说。 :) 请稍等
  • 如果你告诉我如何在另一个活动中检索它会很有用。 .
  • :对不起,这可能是我在课堂上的问题。我不知道如何解决它。我将在此处写另一个问题并粘贴链接。请您等10分钟。我真的需要你的帮助 。谢谢..
  • 我认为您的代码是正确的,但我在课堂上遇到了一些其他问题。我希望你能解决它。我将在 5 分钟后将我的另一个问题链接粘贴到此处。请帮帮我....
【解决方案2】:

首先将 Gson 添加到您的 gradle:

compile 'com.google.code.gson:gson:2.2.4'

将您的列表转换为 Json 字符串,如下所示:

List<String> foo = new ArrayList<String>();
foo.add("Item1");
foo.add("Item2");
foo.add("Item3");

String json = new Gson().toJson(foo );

并将其保存到共享首选项,如下所示:

SharedPreferences.Editor mEditor = mPrefs.edit();
mEditor.putString("yourKey", json);

当你想使用从 pref 中读取你保存的 json 字符串时:

String json = mPrefs.getString("yourKey", "");

将您的 Json 字符串转换为您的对象列表,如下所示。在示例中我使用了字符串。

ArrayList<String> foo = (ArrayList<String>) new Gson().fromJson(json,
                    new TypeToken<ArrayList<String>>() {
                    }.getType());

【讨论】:

  • 嘿,谢谢你的回答。它适用于 ArrayList 吗?你说的是 ...如果我错了请纠正我
  • 它也适用于您的自定义对象。如果您有问题我们可以讨论。
  • 还有一个疑问。我有 ArrayList 的对象。我可以使用 ArrayList obj .toJson(obj) 还是只需要使用 List 对象?
  • 它说铸造这些是多余的,而 retreving,我应该删除这一行的铸造 'ArrayList foo = (ArrayList) new Gson().fromJson(json, new TypeToken>() { }.getType());'
  • 它只是将“[]”值存储在 json 字符串中。 :-/ 它实际上并没有存储任何字符串。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-03-14
  • 2018-02-13
  • 2023-03-18
  • 1970-01-01
  • 2023-03-14
  • 1970-01-01
相关资源
最近更新 更多