来自Retrofit

时间:2017-07-24 07:59:28

标签: android json caching retrofit

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

我正在使用Retrofit从Redson的Json网站获取回复。我想缓存要在脱机模式下使用的应用程序的响应。如果响应或Json中有新项目,我还想更新响应。

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

2 个答案:

答案 0 :(得分:1)

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

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

就此而言,我使用evernote job,它与RxJava(如果你使用的话)配合得很好,它在POST方法中效果很好,并且有.setPeriodic(TimeUnit.DAYS.toMillis(1))这样的属性你把它放在哪里应该运行作业的时间(这适用于每x分钟缓存一次),还有.setUpdateCurrent(true),如果需要,它将更新当前响应。

试着查看这两个库的文档,也许你会发现它们很有帮助。

答案 1 :(得分:0)

对于缓存响应,请在“Retrofit”构建器中使用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