【问题标题】:Caching JSON: HTTP cache vs database缓存 JSON:HTTP 缓存与数据库
【发布时间】:2014-04-17 18:15:58
【问题描述】:

我正在开发一个使用来自后端的 JSON 提要的应用程序。默认情况下,每次用户在连接到 Internet 时访问应用程序时都会触发 HTTP 请求,如果没有网络,则应从缓存中加载数据。我正在使用Retrofit 进行网络连接,并且我看到了两种实现缓存的方法:使用配置为支持缓存的OkHttp 客户端,或者创建一个SQLite 数据库来存储数据。第二个选项对我来说很熟悉,因此看起来更可靠,但是与此方法相关的开销很大。我从来没有真正使用过 HTTP 缓存,我想知道仅依靠它来查看离线数据是否足够?

【问题讨论】:

    标签: android json sqlite http caching


    【解决方案1】:

    您对 SQLite 的看法是正确的,更好的方法是将 HTTP 请求和对实际数据的访问分开。既然是提要,那就是结构化数据。您可以采取以下方法:

    1. Http 请求 -> JSON -> 解析器 -> SQLite DB 插入
    2. 来自 SQLite DB -> 列表或任何其他适配器的 CursorLoader(或自定义任何加载器)

    这样,即使没有互联网,您也始终可以访问数据。您可以随时触发 HTTP 轮询并更新数据库。在更新/更改时,如果当前向用户显示,则内容数据的观察者会触发加载器和更新 UI。

    【讨论】:

    • 感谢您的回答,但是,我仍然不相信使用数据库比使用预配置缓存进行 HTTP 调用更好。 Retrofit 可以发出网络请求并以 List 的形式获得响应,因此我真的不需要其他数据结构机制。
    • 这真的取决于应用程序的逻辑。如果您缓存 JSON 响应,则每次读取时都需要对其进行解析。如果您使用全局 HTTP 缓存,您最终可能会缓存您不需要的响应。如果您从 JSON 或 SQLite 获取项目类,则无论如何都需要您描述的项目类。正如我所说,这实际上是基于应用程序如何工作的决定。
    • 所以我猜 HTTP 缓存解决方案的主要缺点是对缓存的控制较少,并且每次从缓存中提取 JSON 时都必须解析它?
    • 再次感谢,我需要考虑这些细节来选择最佳解决方案。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多