在 SharedPreferences 中存储数组列表对象

Posted

技术标签:

【中文标题】在 SharedPreferences 中存储数组列表对象【英文标题】:Storing Array List Object in SharedPreferences 【发布时间】:2014-05-23 23:05:57 【问题描述】:

此方法将新对象添加到ArrayList

//get text from textview
time = date.getText().toString();
entry_d = entry.getText().toString();
dayName = day.getText().toString();

arrayList.add( new ArrayObject( dayName, entry_d ,time));

我正在尝试将这 3 个字符串添加到 SharedPrefrences 中。这是我的代码:

private void savePreferences(String key, String value) 

    SharedPreferences sharedPreferences = PreferenceManager             
                                     .getDefaultSharedPreferences(this);
    Editor editor = sharedPreferences.edit();
    editor.putBoolean(key, value);
    editor.commit();

此方法一次只添加一个字符串,而我想一次添加 3 个字符串。有什么方法我可以实现。

【问题讨论】:

【参考方案1】:

使用 Gson 库将您的数组或对象转换为 Json,并将您的数据存储为 json 格式的字符串。

保存;

SharedPreferences sharedPrefs = PreferenceManager.getDefaultSharedPreferences(context);
Editor editor = sharedPrefs.edit();
Gson gson = new Gson();

String json = gson.toJson(arrayList);

editor.putString(TAG, json);
editor.commit();

阅读;

SharedPreferences sharedPrefs = PreferenceManager.getDefaultSharedPreferences(context);
Gson gson = new Gson();
String json = sharedPrefs.getString(TAG, "");
Type type = new TypeToken<List<ArrayObject>>() .getType();
List<ArrayObject> arrayList = gson.fromJson(json, type);

【讨论】:

要导入哪些类型类 - ***.com/questions/20847997/… 使用 import java.lang.reflect.Type; 如果arrayList是List怎么办? 不要持久化框架对象或任何复杂的对象,如视图。【参考方案2】:

使用共享首选项存储 Arraylist

SharedPreferences prefs=this.getSharedPreferences("yourPrefsKey",Context.MODE_PRIVATE);
Editor edit=prefs.edit();

Set<String> set = new HashSet<String>();
set.addAll(your Arraylist Name);
edit.putStringSet("yourKey", set);
edit.commit();

从共享首选项中检索 Arraylist

Set<String> set = prefs.getStringSet("yourKey", null);
List<String> sample=new ArrayList<String>(set);

【讨论】:

我们可以使用单个集合添加超过 1 个数组列表...我有 3 个字符串数组列表。我可以使用单个集合或 3 个集合用于 3 个列表 @Prabs 你创建了单独的集合/? @AnshulTyagi 这个集合概念不符合我的要求。所以我没有实现这个概念。为了测试,是的,我创建了单独的集合。 对不起。它只支持 Set 不支持其他。 仅适用于 Set :\ !【参考方案3】:

不要为此使用Hashset。它将改变Arraylist 的顺序。请改用Gson。 如果您想使用Hashset,则必须进行序列化和反序列化,这将占用资源。

【讨论】:

以上是关于在 SharedPreferences 中存储数组列表对象的主要内容,如果未能解决你的问题,请参考以下文章

Android:如何在 SharedPreferences for android 中存储字符串数组

如何存储数组到sharedpreference中

关于SharedPreferences写入和删除数组数据

使用 SharedPreferences 保存字节数组

没有得到相同的 ArrayList 顺序

SharedPreferences 存储