在 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使用共享首选项存储 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不要为此使用Hashset
。它将改变Arraylist
的顺序。请改用Gson
。
如果您想使用Hashset
,则必须进行序列化和反序列化,这将占用资源。
【讨论】:
以上是关于在 SharedPreferences 中存储数组列表对象的主要内容,如果未能解决你的问题,请参考以下文章