【问题标题】:Caching response from Retrofit来自 Retrofit 的缓存响应
【发布时间】:2017-12-29 17:12:46
【问题描述】:

我确实提前道歉,因为我知道问题已经存在,但我想找到一个更简单的方法或指南来彻底解释它。

我正在使用 Retrofit 从 Reddit 的 Json 网站获取响应。我想缓存要在离线模式下使用的应用程序的响应。如果响应或 Json 中有新项目,我也想更新响应。

请您指导我正确的方向,因为我以前从未使用过缓存。

【问题讨论】:

标签: android json caching retrofit


【解决方案1】:

对于缓存响应,请在 Retrofit builder 中使用 OkHttpClient

int cacheSize = 10 * 1024 * 1024; // 10 MB  
Cache cache = new Cache(getCacheDir(), cacheSize);

OkHttpClient okHttpClient = new OkHttpClient.Builder()
        .cache(cache)
        .build();

Retrofit.Builder builder = new Retrofit.Builder()
        .baseUrl("http://10.0.2.2:3000/")
        .client(okHttpClient)
        .addConverterFactory(GsonConverterFactory.create());

Retrofit retrofit = builder.build();

上面的 Retrofit 实例将缓存所有响应,直到达到 10 MB 的最大值。超过缓存磁盘限制后,它会清理最旧的条目。

更多详情:Retrofit response caching

【讨论】:

    【解决方案2】:

    至少对我来说,最好的方法是制作一个模型 pojo 类,并将给出的响应放入该类的对象中。关于缓存,我使用的是hawk,这是一个简单的键值存储,经证明易于使用并且运行良好,因为它将数据放入应用程序存储并保留在那里,即使您卸载并重新安装应用程序也是如此.

    关于更新部分,你必须得到响应才能查看它是否相同,所以为什么不简单地覆盖旧的,这样你总是有最新的。

    就此而言,我正在使用evernote job,它与 RxJava(如果您正在使用)配合得很好,它与 POST 方法配合得很好,并且具有像 .setPeriodic(TimeUnit.DAYS.toMillis(1)) 这样的属性,您可以在其中放置工作应该的时间运行(这有利于每 x 分钟缓存一次),还有.setUpdateCurrent(true),如果需要,它将更新当前响应。

    只需尝试查看这两个库的文档,也许您会发现它们很有帮助。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-07-17
      • 2011-01-27
      • 2015-12-13
      • 2015-07-05
      • 2015-02-27
      • 1970-01-01
      • 1970-01-01
      • 2013-10-23
      相关资源
      最近更新 更多