我正在使用 okhttp 和 Retrofit 来调用 REST 服务。从该服务返回的数据存储在我的 Android 应用程序中的 sqlite 数据库中。
每当我调用 REST api 时,如果数据没有更改(由 ETag 或 Last-Modified header 确定),我希望 Retrofit 回调不执行任何操作(数据库中的数据没问题)。否则,我想从 REST 服务下载更新的 JSON 并更新数据库(通过回调的 onSuccess 方法)。
有关缓存响应的所有设置磁盘缓存的 okhttp 示例,我只需要缓存/存储每个请求的 Etag/上次修改时间(而不是整个响应)。
我应该通过传递给 okhttp 的自定义缓存实现来执行此操作,还是应该与 okhttp 或 Retrofit 一起使用更好的接口(interface)?
一旦我完成了实现设置,我是否只需要在 onFailure 回调中处理304“错误”而不执行任何操作?
最佳答案
要知道您是否收到 304 作为响应,您可以在 onResponse 回调中捕获它,如下所示:
if (response.raw().networkResponse().code() == 304){
// Do what you want to do
}
至少,这是当您使用 Retrofit 2 和 okHttp 3 时的情况。不确定早期版本,但我想它会是一样的?在响应中设置断点时,您始终可以尝试查找 304 响应。
关于retrofit - 在 okhttp 中,我想处理 Last-Modified 和 ETags,但不缓存整个响应,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25949691/