【问题标题】:Cache requests using retrofit2 and okhttp3使用 retrofit2 和 okhttp3 缓存请求
【发布时间】:2018-01-09 10:45:56
【问题描述】:

我正在使用 retrofit2 通过缓存拦截器兑现响应

 @Override
public Response intercept(Chain chain) throws IOException {
    Response originalResponse = chain.proceed(chain.request());
    if (NetworkUtil.isConnected(context)) {
        return originalResponse.newBuilder()
                .header("Cache-Control", "public, max-age=" + MAX_AGE)
                .build();
    } else {
        return originalResponse.newBuilder()
                .header("Cache-Control", "public, only-if-cached, max-stale=" + MAX_STALE)
                .build();
    }
}

但是我需要缓存特定的请求而不是全部,该怎么做?

【问题讨论】:

  • 你在Chain有你的要求,你可以查看url或者你需要的。
  • 不确定。但是查看speakerdeck.com/jakewharton/…,您将标题添加到您的调用中,然后在拦截中检查相同的内容并执行所需的操作。检查幻灯片 37 到 43
  • 我可以在内部缓存特定请求,而不会覆盖发送到服务器的请求中的“Cache-Control”标头?

标签: android retrofit2 okhttp3


【解决方案1】:
public Response intercept(Chain chain)

这里的链包含正在发出的请求。

public Response intercept(Chain chain) {
    Request request = chain.request()
}

您可以检查此请求并根据信息采取行动,例如使用request.url()request.headers()

查看更多关于拦截here的信息。

【讨论】:

  • 感谢@Tim 真的很有帮助。
  • 我可以在内部缓存特定请求,而不会覆盖发送到服务器的请求中的“Cache-Control”标头?
  • @Sahar 可能。请参阅stackoverflow.com/questions/29119253/… 和其他示例
猜你喜欢
  • 2016-06-29
  • 2017-03-13
  • 2018-04-11
  • 2017-06-05
  • 1970-01-01
  • 2021-12-05
  • 2016-08-11
  • 2019-05-11
  • 1970-01-01
相关资源
最近更新 更多