4

我需要保存一组复杂的preferences,本质上HashMap包含 other 的数组hashmaps作为其键的值。

我怎样才能将其保存到preferences,或者我应该preferences以其他方式保存吗?我应该为首选项创建一个对象并将其序列化为文件吗?如果是这样,请问如何做到这一点?

4

5 回答 5

2

您可以使用 Paper,它是一个快速的 NoSQL 数据库。易于在其中创建和存储数据。链接在这里。 https://github.com/pilgr/Paper

于 2019-11-07T13:10:52.607 回答
1

SharedPreferences仅将原始值存储在键/值对中。因此,我认为这不是存储 a HashMapof Arrays of HashMaps 的最佳方式——除非数据可以以有意义的方式展平(如果您使用的HashMaps 数量确实键值对是否无法将该数据存储为常规键值对?)。

如果数据结构真的那么复杂,您需要研究其他存储选项。根据长度,我可能只使用SQLite数据库。它易于设置,可以在您的应用程序中的任何位置访问,像存储的首选项一样持久且快速。

于 2013-07-24T13:52:51.063 回答
0

我已经忘记了这一点,但我想我会在这么久之后发布一个答案。我一般使用序列化来存储这样的项目如下。

  1. 使用您要存储的信息创建一个 LinkedHashMap 或一组 LinkedHashMap。
  2. 选择一个名称,然后将其(对象为 Map 或 Array)保存到磁盘,如下所示:
public void serializeObject(Object object, String filename) {

        try {

            File file = new File(context.getFilesDir(), filename);
            ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream(file));
            oos.writeObject(object);
            oos.flush();
            oos.close();
        }
        catch (IOException e) {e.printStackTrace();}
    }
  1. 要检索,请执行以下操作:
File file = new File(context.getFilesDir(), Filename);
if (file.exists()) map = (LinkedHashMap) loadSerialisedClassFile(file);

public Object loadSerialisedClassFile(File file) {

        try {

            ObjectInputStream ois = new ObjectInputStream(new FileInputStream(file));
            Object object = ois.readObject();
            return object;
        }
        catch(Exception ex) {

            ex.printStackTrace();
        }

        return null;
    }
于 2019-11-07T17:51:30.507 回答
0

您可以使用 Gson 库

Gson 是一个 Java 库,可用于将 Java 对象转换为其 JSON 表示形式。它还可用于将 JSON 字符串转换为等效的 Java 对象。

通过使用 Gson,您可以将您的类结构转换为 json 格式,然后将其作为字符串格式存储到共享首选项中,当您想要恢复该类结构时,您可以再次使用 gson,gson 会将您的 json 格式再次转换为 java 对象。

更多检查 Gson

于 2019-11-07T18:13:48.263 回答
0

如果你有一个复杂的数据结构,并且你想将它存储在共享首选项中,那么你可以考虑为你的对象创建一个 to_json() 方法。然后当然是 from_json(String json) 方法。

于 2017-01-05T03:55:24.830 回答