安卓数据库或XML/KML?

3
哪种方式更好、更有效率和更快?是以XML格式存储信息并检索还是在Android上使用数据库存储信息?
此外,在可移植性方面,XML可以作为资源存储...那么DB能否做到同样的事情?所有手机都默认装有DB包吗?
该应用程序涉及处理超过1000条数据记录。
3个回答

2
一个SQLite数据库在涉及大量数据时会更快 - 它将更快地找到你想要的内容。对于少量数据,KML文件的开销比DB小得多,但对于动态数据并不是很有用。如果需要更新或添加数据,则必须将文件存储在可写位置,如果要继续使用xml文件。对于约1000个以上的条目,我会考虑使用SQLite DB - 你可以做以下两件事情之一 - 预编译一个DB供你的应用程序使用,然后将DB文件放入asset文件夹中,然后在第一次运行时检查DB文件是否存在 - 如果不存在,则将文件从asset文件夹移动到DB文件夹中(见下面的注释)。或者,您可以将条目存储在asset文件夹中的KML文件中,然后在第一次运行时使用解析器将kml文件中的每个条目写入DB。从KML或CSV文件获取文件需要一段时间来处理,具体取决于条目数量。我有一个应用程序可以从SDCard上的csv文件获取数据,并将其加载到DB中,作为测试,约7000个条目在desire上花费了约35秒钟。此外,我认为raw和asset文件夹的大小限制约为1mb。请查看此链接,它展示了第一次运行应用程序时移动大型DB的非常有用的方法:Database Populating Solution。

非常感谢你,Scoobler...这真的是非常有帮助的... Scoobler..我相信你已经在开发我现在正在尝试开发的应用程序上工作过。请问一下,当从Web服务器接收到KML内容时,我该如何刷新地图(比如每10秒钟刷新一次)?我有一个服务器,它将生成动态KML并通过输出流发送信息。 - i_raqz
这实际上取决于您如何处理从服务器传入的数据。为了刷新地图,我使用:mapView.postInvalidate();(因为它在一个线程中运行)。您可能可以使用延迟处理程序https://dev59.com/eHI_5IYBdhLWcg3wHfOr,但是您需要在每次使视图失效之前加载覆盖层,以便在重绘时显示新的覆盖层项。//将叠加层添加到地图: map_overlays.add(po); - Scoobler
非常感谢。我已经能够使用处理程序并每10秒与服务器通信。我参考了这个例子http://android-developers.blogspot.com/2007/11/stitch-in-time.html。 - i_raqz

0

你不能将assets/raw文件夹用作可写资源。它们是只读的。

所以基本上你有两个选择:

  1. 将数据存储到数据库(SQLite)中
  2. 将数据存储在偏好设置中 - 实际上是XML文件存储在某个地方/类似于

    /data/data/[你的包名]/shared_prefs

我的个人选择:如果数据大小超过100条记录-使用数据库,如果少于则使用偏好设置。


0

我的选择是

  1. 我使用数据库来存储结构化数据。当需要通过某些字段搜索数据集或按不同字段排序时,使用数据库。当需要额外的逻辑时,请使用数据库。
  2. 当只需要持久化数据而没有其他逻辑时,我使用“共享首选项”文件,仅使用键值对。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接