首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >将复杂结构保存到共享首选项

将复杂结构保存到共享首选项
EN

Stack Overflow用户
提问于 2013-07-24 13:34:52
回答 5查看 2K关注 0票数 4

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

我如何将它保存到preferences,或者应该以另一种方式保存这样的preferences?我应该为首选项创建一个对象并将其序列化为一个文件吗?如果是的话,请怎样做呢?

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2019-11-07 17:51:30

我已经忘记了这件事,但我想过了这么长时间,我会发个答案的。我通常使用序列化来存储这些项目,如下所示。

  1. 使用要存储的信息创建LinkedHashMap或LinkedHashMaps数组。
  2. 选择一个名称,然后将它(对象是Map或Array)保存到磁盘中,如下所示:
代码语言:javascript
运行
复制
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. 若要检索,请按以下方式进行:
代码语言:javascript
运行
复制
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;
    }
票数 0
EN

Stack Overflow用户

发布于 2019-11-07 13:10:52

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

票数 2
EN

Stack Overflow用户

发布于 2013-07-24 13:52:51

SharedPreferences只在键/值对中存储原始值。因此,我不认为这是存储HashMap of Arrays of HashMaps的最佳方法--也就是说,除非数据可以以一种有意义的方式被扁平化(如果您使用的是一些真正的键值对HashMaps,那么您没有办法将这些数据存储为常规的键值对吗?)

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17835602

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档