将数组列表对象存储在SharedPreferences中

23

这个方法将新的对象添加到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个字符串。是否有我可以实现的方法。


我希望这是你的问题,并且可以通过这个答案解决:https://dev59.com/u14c5IYBdhLWcg3wSIgs#75003482 - Surajkaran Meghwanshi
3个回答

86
使用Gson库将您的数组或对象转换为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);

需要导入哪些类型类 - http://stackoverflow.com/questions/20847997/convert-jsonstring-to-a-custom-java-arraylist - Vintesh
20
使用 import java.lang.reflect.Type; - CrazyMind
如果ArrayList是List<View>,该怎么办? - ajay dhadhal
不要持久化框架对象或像视图这样的复杂对象。 - Sinan Kozak

22

使用共享偏好设置存储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);

我们可以使用一个集合来添加多个数组列表吗?我有3个字符串数组列表。我可以使用单个集合还是3个集合来处理这3个列表? - Prabs
@Prabs,你创建了单独的集合吗? - Anshul Tyagi
@AnshulTyagi 这些概念并不符合我的需求,所以我没有实现这个概念。为了测试,是的,我创建了单独的集合。 - Prabs
3
抱歉,它只支持Set<String>,不支持其他类型。 - Hari krishna Andhra Pradesh
1
这只针对 Set<String> 的! - Ahmad Alkhatib
如果元素的顺序很重要,我不建议使用putStringSet()方法,因为在Set中元素的顺序是不确定的。可能在大多数情况下,它将按照保存的顺序检索,但这并不保证。 - Miklos Jakab

3
不要使用 Hashset 来实现此操作。它会改变 Arraylist 的顺序。相反,应该使用 Gson。 如果您希望使用 Hashset,则必须进行序列化和反序列化,这将占用资源。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接