在okhttp中,我想处理Last-Modified和ETags,但没有缓存整个响应

时间:2014-09-20 14:17:56

标签: retrofit etag last-modified http-caching okhttp

我正在使用okhttp和Retrofit来调用REST服务。从该服务返回的数据存储在我的Android应用程序内的sqlite数据库中。

每当我调用REST api时,如果数据没有改变(由ETag或Last-Modified标头确定)我想让Retrofit回调什么也不做(DB中的数据没问题)。否则,我想从REST服务下载更新的JSON并更新数据库(通过我的回调的onSuccess方法)。

关于缓存响应的所有安装磁盘缓存的okhttp示例,我只需要缓存/存储每个请求的Etag /最后修改时间(而不是整个响应)。

我应该通过我传递给okhttp的自定义Cache实现来实现这一点,还是有一个更好的接口我应该使用okhttp或Retrofit?

一旦我有实现设置,我只需要在我的onFailure回调中处理 304“错误”并且什么都不做?

1 个答案:

答案 0 :(得分:4)

要知道你是否有304响应,在onResponse回调中你可以按如下方式捕获它:

if (response.raw().networkResponse().code() == 304){
    // Do what you want to do
}

至少,这是在你使用Retrofit 2和okHttp 3时。不确定早期版本,但我想它会有点相同?在响应中设置断点时,您总是可以尝试找到304响应。