【问题标题】:Is it possible store without a database at android?是否可以在没有数据库的情况下在 android 上存储?
【发布时间】:2011-09-28 05:10:47
【问题描述】:

是否可以在应用程序中存储一个列表,而不必拥有数据库? 否则,存储简单列表的最简单方法是什么?

【问题讨论】:

  • 你总是可以通过创建文件来存储数据。这有什么问题?
  • 列表中有什么?字符串?这很容易,只需将字符串保存在一个文件中,按您想要的任何方式分开。如果它的对象尝试序列化它们

标签: java android database mobile store


【解决方案1】:

我认为这取决于您正在处理的列表的内容。如果您的列表仅存储“简单对象”(如整数字符串列表列表或其他只有少数成员的对象),您可以使用 Android 中内置的 SharedPrefenrences。他们需要一个键和一个值。因此,如果您的列表包含 5 个对象 - 让我们说点以保持简单 - 您可以将它们保存为

SharedPreferences.Editor editor = getSharedPreferences("YourListName", MODE_PRIVATE).edit();
for(int i = 0; i < YOUR_LIST.count() ; i++){
    Point p = YOUR_LIST.get(i);
    editor.putInt("Element" + i + " X", p.x);
    editor.putInt("Element" + i + " Y", p.y);
}
editor.commit();

要再次收到这个,你可以说

SharedPreferences prefs = getSharedPreferences("YourListName", MODE_PRIVATE);
Map<String, ?> map = prefs.getAll();

【讨论】:

  • 很好,但是我应该如何处理变量 p ?
  • 哎呀,很抱歉这是一个错字。我假设它是一个点列表,所以我将它更正为 p.x 和 p.y,因为点对象有两个成员,int x,y。我将地图从 Map 更正为 以使其清晰。所以替换 Point 并将你自己的 Object 放入其中。
  • 啊好吧!在这种情况下,您将不得不在 Point 对象中搜索键“Element2 X”,对吧?而且,我认为这 Map&lt;String, Point&gt; map = prefs.getAll() 不起作用,因为 prefs.getAll() 返回一个 map ...我想。
  • 对,你必须搜索它。你的 Int 是对的,因为我们把 Int 放在里面。实际上它返回 map 您可以将 YOUR_LIST.count() 放入单独的 SharedPrefs 中,以了解如果这是可变的,您得到了多少。
【解决方案2】:

在Android中Data Storage有几种方式: 看看开发者专区,那里有你需要的所有信息:

Shared Preferences 将私有原始数据存储在键值对中。

Internal Storage 将私有数据存储在设备内存中。

External Storage 将公共数据存储在共享的外部存储上。

SQLite Databases 将结构化数据存储在私有数据库中。

Network Connection 使用您自己的网络服务器将数据存储在网络上。

如果您已经找到最适合您需求的存储,请随时要求任何类型的存储。

【讨论】:

  • 我有一个对象列表(不是原语),即使我的应用程序被杀死,我也想存储它们。所以,我想SQLite Databases 是最好的选择。
  • 没错,我推荐一个sqlite数据库。此外,您应该考虑使用像 ormlite.com/sqlite_java_android_orm.shtml 这样的 ORM 选项
【解决方案3】:

数据库有多种持久性替代方案。仅举几例(可通过 Java 访问),您可以

  • 使用简单文件(使用 serialisation 或其他配置格式 - 在这种情况下,请查看 commons configuration)
  • 编写 XML 内容(使用 XML 序列化 - 再次?!? - 或其他机制,如 XStream、JAXB、...)
  • 使用任何 NoSQL 存储(图形数据库、文档数据库等,...)
  • 使用流行层(如space4j)
  • 使用事务性数据存储(如JDBM)

仅列举 Java 众多存储功能中的一小部分

【讨论】:

【解决方案4】:

【讨论】:

    【解决方案5】:

    Java 允许您通过简单的 API 使用对象的序列化。 Here有一篇来自java网页的技术文章。

    【讨论】:

    • @mathiasnj 和 Cinquo。看来Internal Storage。是一样的吗?
    • 看起来内部存储允许写入应用程序的私有区域,如果您的应用程序需要它,这可能是您可能需要的。当我提到序列化时,我的意思是有一种方法能够将具有特定格式的对象映射(和写入)到文件中的另一种格式(反序列化只是相反的操作)。格式可以是任何适合您的格式,在这种情况下,如果它是一个元素列表,您可以在每个文件行放置一个元素。您还可以评估诸如泡菜(cPickle 库)之类的东西。
    猜你喜欢
    • 1970-01-01
    • 2011-08-31
    • 1970-01-01
    • 2013-01-05
    • 2011-04-21
    • 1970-01-01
    • 1970-01-01
    • 2012-10-14
    • 1970-01-01
    相关资源
    最近更新 更多