在Android中处理JSON数据的最佳策略是什么?

时间:2015-09-17 07:23:45

标签: android json sqlite

我正在尝试找出Android中数据缓存的最佳策略,特别是考虑到使用数据绑定库。

Android文档似乎非常强调使用内置的SQLite数据库并在内容提供商的帮助下访问它。但是,假设我的应用程序从REST API检索JSON格式的数据,使用此策略将需要以下内容:

Make HTTP request --> Parse JSON --> Insert results into DB 
--> Call content provider --> Build model from cursor --> Bind to view

这不仅仅是一种相对简单的做事的迂回方式,但假设所有这些都发生在用户首次打开应用程序时,结果将是大量的等待,然后屏幕上出现任何有用的内容。

为了加快速度,我可能会先决定创建我的模型,让缓存发生在一个单独的线程中,如下所示:

Make HTTP request --> Build model from JSON --> Bind to view
                  -->(NEW THREAD) --> Insert results into DB 

缓存数据后,下次用户打开应用时会发生以下情况:

Call content provider --> Build model from cursor --> Bind to view

但当然这会增加更多的复杂性,例如迫使我维护代码以从两个来源构建模型:JSON和内容提供者返回的游标。

鉴于上述情况,我更倾向于取消SQLite / ContentProvider模型,而是执行以下操作:

Make HTTP request --> Build Model and Store JSON to file --> Bind to view

但是这会大大减少样板,解析(大量可用于JSON解析的库)和整体复杂性,这也意味着我无法利用内容提供者和SQLite的功能。

所以问题是,我应该遵循哪种模式?是否存在一个比另一个好的情况?或者有更好的方法来处理这个我不知道的过程吗?

1 个答案:

答案 0 :(得分:0)

问题的可能解决方案可能是Google IO app中使用的解决方案。它们解析远程服务器上可用的JSON并直接显示该内容。为了避免空屏幕,他们使用引导程序json文件,其中包含服务器上可用数据的图像。所有这些信息都可用here。更具体地说:

  

Bootstrap数据   当用户第一次运行应用程序时,他们希望看到数据。但是,如果我们仅依靠同步机制将数据带入应用程序,那么首次使用的用户会在等待同步发生时盯着空白屏幕,这将是糟糕的用户体验。

     

这就是为什么IOSched附带预加载的" bootstrap数据",它本质上是JSON数据的预加载离线快照。该数据由应用程序解析,并在首次执行时保存到数据库中。

     

您可以在res / raw / bootstrap.json中找到此文件。它只是一个文本文件,其中包含服务器上JSON文件的组合快照。