我正在使用okhttp和Retrofit来调用REST服务。从该服务返回的数据存储在我的Android应用程序内的sqlite数据库中。
每当我调用REST api时,如果数据没有改变(由ETag或Last-Modified标头确定)我想让Retrofit回调什么也不做(DB中的数据没问题)。否则,我想从REST服务下载更新的JSON并更新数据库(通过我的回调的onSuccess方法)。
关于缓存响应的所有安装磁盘缓存的okhttp示例,我只需要缓存/存储每个请求的Etag /最后修改时间(而不是整个响应)。
我应该通过我传递给okhttp的自定义Cache实现来实现这一点,还是有一个更好的接口我应该使用okhttp或Retrofit?
一旦我有实现设置,我只需要在我的onFailure回调中处理 304“错误”并且什么都不做?
答案 0 :(得分:4)
要知道你是否有304响应,在onResponse回调中你可以按如下方式捕获它:
if (response.raw().networkResponse().code() == 304){
// Do what you want to do
}
至少,这是在你使用Retrofit 2和okHttp 3时。不确定早期版本,但我想它会有点相同?在响应中设置断点时,您总是可以尝试找到304响应。