我有一些堆栈并希望使用SharedPreferences保留它们。 SharedPreferences中只有基本的东西可供使用。有没有简单的方法来保存复杂/自定义数据结构?
答案 0 :(得分:3)
使用Gson,您可以轻松地将自定义对象保存到SharedPreferences
保存:
Editor prefsEditor = mPrefs.edit();
Gson gson = new Gson();
String json = gson.toJson("MyObject");
prefsEditor.putString("MyObject", json);
prefsEditor.commit();
负载:
Gson gson = new Gson();
String json = mPrefs.getString("MyObject", "");
MyObject obj = gson.fromJson(json, MyObject.class);
答案 1 :(得分:2)
你可以和马库斯一起回答。这是我在项目中所做的:
存储在共享首选项中:
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(getActivity());
SharedPreferences.Editor edit = prefs.edit();
Gson gson = new Gson();
String json = gson.toJson(MyImages);
edit.putString("MyImages", json);
从共享首页中退出:
Gson gson = new Gson();
String json = PreferenceManager.getDefaultSharedPreferences(getActivity()).getString("MyImages", "");
ArrayList<String> MyImages= new ArrayList<String>();
MyImages=gson.fromJson(json, ArrayList.class);
这样你也不会失去你的数据结构(如果它是按某种顺序)。
如果将Map直接放入共享首选项,则在检索Map时将丢失数据的顺序。对我而言,序列很重要,gson + Arraylist工作得很好。
另一种方法是不使用SharedPrefs并将数据存储在文件(内部存储器)中:
File file = new File(getDir("data", MODE_PRIVATE), "map");
ObjectOutputStream outputStream = new ObjectOutputStream(new FileOutputStream(file));
outputStream.writeObject(map);
outputStream.flush();
outputStream.close();