如何在 SharedPreferences 中保存堆栈

How to save stacks in SharedPreferences

我有一些堆栈,想使用 SharedPreferences 来保存它们。只有基本的东西可以放在 SharedPreferences 中。是否有任何简单的方法来保存复杂/自定义数据结构?

使用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);

你可以用马库斯的答案。这是我在我的项目中所做的:

存储在共享首选项中:

       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 放入shared prefs 中,在检索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();