使用Android应用程序部署大量静态数据

时间:2011-08-14 11:31:08

标签: android database json sqlite loading

我有一个需要离线工作且需要大量静态数据的Android应用。

目前我在/ res / raw中使用JSON文件,并将Jackson解析器加载到我的POJO方案中。它工作得非常好,因为我有一个外部程序将生成这些数据,偶尔当有变化时我会向市场发布新版本,所以我不必处理运行更新服务器和等等。

但是,现在我的JSON文件大约是2.5MB,有限的数据集用于测试,最后它将大约为5-10MB。

问题是解析文件大约需要3-5秒,每次重启应用程序时都需要这样做。

那么,我的选择是什么?我可以将数据放到sqlite数据库中,但这需要重写外部应用程序并更改数据结构。但后来我只能查询我现在需要的东西,而不是一次性加载整个东西。

有更简单/更好的方法吗?另外,有没有一种方法可以使用sqlite数据库发布应用程序?我发现的所有文章都谈到在第一次启动时为用户数据创建数据库,但这不是用户数据,我需要从市场部署它。

2 个答案:

答案 0 :(得分:4)

JSON感觉这是错误的方法 - 这是一种编码数据进行传输的好方法,但这就是它。

关于你的应用程序究竟有什么更多的信息会很高兴,但是我很难想象一个用例,在内存中有几MB的POJO是一种有效的解决方案。我认为使用SQLite会好得多,这就是原因:

  

我可以将数据放到sqlite数据库中,但这需要重写外部应用程序并更改数据结构。

你仍然可以使用你的其他程序的JSON输出,但是你可以在第一次应用程序启动时填充数据库,而不是用Jackson将所有内容加载到POJO中。这样,如果数据集未更改,则应用程序启动时间可以忽略不计。

如果您仍想在应用程序的其余部分使用POJO,那么编写一个从数据库中检索数据的查询,并以与Jackson相同的方式创建对象,这一点很简单。

  

但是我现在只能查询我需要的东西,而不是一次性加载整个东西。

您在做什么需要立即访问所有数据?搜索或排序一组对象总是比SQL查询慢,以实现同样的目的。

  

此外,是否有一种使用sqlite数据库发布应用程序的好方法?

你绝对可以通过数据库运送您的应用程序,但我个人并没有这样做。这是一个相关的问题:

By Default load some data into our database sqlite

希望有所帮助。

答案 1 :(得分:0)

有一个很棒的API,叫做JExcel(只是google),适用于.xls电子表格。如果您不打算进行任何选择并且只是从源加载数据,我喜欢使用JExcel,因为它更易于从桌面管理并产生更易于阅读的代码。

不确定是否存在任何性能差异。只要投入我的2美分:p