【问题标题】:Best way to store array persistently in Android without using SQLite在不使用 SQLite 的情况下在 Android 中持久存储数组的最佳方法
【发布时间】:2014-02-24 13:29:22
【问题描述】:

我的 android 应用程序中有一个数组,我想在应用程序关闭时存储它,然后在应用程序再次打开时恢复。我知道通常在 SQLite 数据库中的 android 中存储大量数据。但我只是有一些我想存储的数组。因此,我想知道最好的方法是什么。

对我来说最好的意思如下:

  • 良好的性能

  • 简单、不复杂的代码

  • 能够存储多维数组和arrayLists

以下是我想出的可能性:

  • JSON

  • XML

  • 元编程,将数组存储在文本文件中,就像初始化它一样,然后使用元编程读取它。这并不容易,但在 Java 中是可行的。

虽然这当然不是一个详尽的列表。根据上述标准,在 Java 中存储数组的最佳方式是什么?

我知道这不是典型的 Q/A 问题,但我认为由于我提供了明确的标准和示例,它不违反 stackoverflow 的“问题规则”

【问题讨论】:

  • 你考虑过 SharedPreferences 吗?
  • 你考虑过原始二进制文件吗?标准序列化还是自定义?
  • 详细描述这些“一些数组”,即原语或对象以及预期的数组大小,因为任何答案或方向都取决于您要存储的内容以及您希望如何检索它(线性与随机访问)。
  • 在我的具体情况下,它将是枚举数组

标签: java android json xml


【解决方案1】:

Android中有4个basic methods用于数据存储。

  1. Internal storage- 这基本上是一个私人文件夹,您可以在其中写入文件。你可以在那里写一个小文件,然后再读回来。
  2. External Storage- 与内部相同,但其他应用程序可以看到它。通常这是一张 SD 卡。这对于您不希望在内部有限内存中的大型数据集很有用,并且您不介意共享(MP3、图像等)
  3. SQLite Database- 最适合表格格式的大型数据集。
  4. Shared Preferences- 最适合少量数据,用于存储偏好值,可能是高分等。本身不存储数组,但您可以存储 json 字符串,正如您提到的那样。

为了存储一组高分,我使用了内部存储文件夹,它似乎可以很好地满足我的目的。选择方法后,您应该能够弄清楚如何正确写入/获取数据。如果你不能,请随时提出另一个问题来帮助解决这个问题。

【讨论】:

    【解决方案2】:

    如果数组中的对象是Serializable,您可以将它们写入存储在 sdcard 上的文件中。这样你就不需要使用数据库了。像这样的:

    ObjectOutputStream dataOutputStream = new ObjectOutputStream(new FileOutputStream(myFile));
    dataOutputStream.writeObject(myList);
    

    然后检索数组:

    ObjectInputStream inputStream = new ObjectInputStream(new FileInputStream(myFile));
    List<MyObject> myList = (List<MyObject>) inputStream.readObject();
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-02-27
      • 1970-01-01
      • 2012-05-07
      • 1970-01-01
      • 2011-01-15
      • 2012-10-29
      相关资源
      最近更新 更多