【问题标题】:Best approach to save permanently an ArrayList of a personalised type永久保存个性化类型的 ArrayList 的最佳方法
【发布时间】:2012-12-03 18:40:31
【问题描述】:

我有一个 ArrayList of Persons (ArrayList<Person>),我想将该 ArrayList 存储在持久数据类型中。 SharedPreferences 是一种解决方案,但它只是在操作 String、int、float`... 变量。你有什么想法吗? 非常感谢。

【问题讨论】:

    标签: android arraylist sharedpreferences


    【解决方案1】:

    更简单的是使用java Serialisation

    你只需要一个 Persons 类:

    public class Persons {
    
      ArrayList<Person> personList;
    }
    

    然后简单地使用

    // init Persons
    Persons person = new Persons();
    // add some
    persons.personList.add(new Person());
    
    // write out
    ObjectOutpuStream oos = new ObjectOutputStream(new BufferOutputStream(new FileOutputStream("personsDB.ser")));
    
    oos.writeObject(persons);
    oos.close();
    

    回读

    ObjectInputStream ois = new ObjectInputStream(new BufferedInpuStream(new FileInpuStream("personsDB.ser")));
    persons = (Persons) ois.readObject();
    ois.close();
    // ready! Java does that all for you; since Persons is one object which contains something
    

    缺点是在写入过程中会丢失电池电量。有些人先写入一个临时文件,删除旧的并重命名为正确的文件名。

    为了高性能(更少的空间,更快) 您可以使用DataOutputStream,但您必须自己编写所有字段(但这也很简单)

    【讨论】:

    • 你把它写到一个文件中:如果你不删除它,那么它就是永久的
    • @androniennn 更新:SQl Lite 是一个关系数据库;如果您想进行查询,您可以使用它:例如给年龄 > 18 岁且收入 的人
    • 然后在回读时,我必须创建一个循环来将 people 变量存储在 ArrayList 中?
    • 对于 kumaand 的回答,我的意思是他回答的写入/读取文件部分;)(就像你的一样)
    • 如果您可以在回读时使用 ArrayList 部分编辑您的答案,那将是完美的。我已经可以从网上下载 json 文件并将其放在 sdcard 的目录中。
    【解决方案2】:

    我会将数组中的每个 Person 存储为 SQLite 数据库中的一行。当您想将其读回程序中时,每一行都成为数组中的一个Person 对象。

    【讨论】:

    • 是的,这是自定义类。其实ArrayList是解析一个json文件得到的。
    • 编辑了我的答案,但基本上是一样的。
    • 我同意,但还有其他简单的解决方案吗?我将在没有互联网连接时使用该列表,否则它将直接从网络解析 json 文件。
    【解决方案3】:

    您必须使用数据库或将 json 响应写入文件并从文件中读取它

    【讨论】:

    • 我认为这是最好/最简单的答案。您是否有一些代码可以从 json 文件中读取并将流放入 ArrayList 中?
    猜你喜欢
    • 2012-12-24
    • 2020-03-12
    • 2011-04-04
    • 1970-01-01
    • 2013-08-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-02
    相关资源
    最近更新 更多