当前位置:  开发笔记 > 编程语言 > 正文

检测OkHttp响应是否来自缓存(使用Retrofit)

如何解决《检测OkHttp响应是否来自缓存(使用Retrofit)》经验,为你挑选了2个好方法。



1> Eric Cochran..:

只要有okhttp3.Response(retrofit2.Response.raw()),就可以检查响应是否来自缓存.

引用Jesse Wilson的话:

有几个组合.

仅限.networkResponse() - 您的请求来自网络.

.cacheResponse() -你的请求是从缓存中提供完全.

.networkResponse()和.cacheResponse() - 您的请求是条件GET,因此标头来自网络,正文来自缓存.

因此,对于您的示例,该isFromCache方法将如下所示:

boolean isFromCache(Result result) {
  return result.response().raw().networkResponse() == null;
}



2> sebastian..:

解决方案1:

通过使用okhttp3.Response.cacheResponse(),您可以检查是否从缓存接收到响应:

返回从缓存接收的原始响应.如果此响应未使用缓存,则为null

要从您的改造响应使用中获取原始的OkHttp响应.raw().即:

public boolean isFromCache(Result retroResult) {
    return retroResult.response().raw().cacheResponse() != null;
}

解决方案2:

您可以通过以下方式将Interceptor添加到OkHttp客户端new OkHttpClient.Builder().addInterceptor(...).在这个Interceptor中通过检索响应chain.proceed(chain.request).然后Response.cacheResponse()分别使用Response.networkResponse()以确定响应来自何处.

完整代码:

new OkHttpClient.Builder().addInterceptor(chain -> {
        Response response = chain.proceed(chain.request());
        if (response.cacheControl() != null) {
            // from cache
        } else if (response.networkResponse() != null) {
            // from network
        }
        return response;
});


它总是表明响应来自缓存!即使我卸载了应用程序!
推荐阅读
围脖上的博博_771
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有