OkHttp实现网络缓存的问题——响应缓存没有读取

Clendy2016 2016-02-25 07:17:02
最近项目需要添加网络响应缓存,请求框架使用的是OkHttp 3.1.0版本,以前没怎么过多研究缓存,照着这个帖子http://www.jianshu.com/p/9c3b4ea108a7 写的,查看包名下确实有缓存,但在断网下貌似没有读取缓存,请大神指教,不用Retrofit会产生什么影响?

代码如下?

//设置缓存路径
File httpCacheDirectory = new File(mContext.getExternalCacheDir(), "responses");
// 暂时设置缓存 10M
Cache cache = new Cache(httpCacheDirectory, 10 * 1024 * 1024);
OkHttpClient mOkHttpClient = okHttpClientBuilder.addInterceptor(interceptor).cache(cache) .build();

//拦截器
private static final Interceptor interceptor = new Interceptor() {
@Override
public Response intercept(Chain chain) throws IOException {
Request request = chain.request();
if (!isNetworkReachable(mContext)) {
request = request.newBuilder()
.cacheControl(CacheControl.FORCE_CACHE)
.build();
}

Response response = chain.proceed(request);
if (isNetworkReachable(mContext)) {
int maxAge = 1 * 60; // read from cache for 1 minute
response.newBuilder()
.removeHeader("Pragma")
.header("Cache-Control", "public, max-age=" + maxAge)
.build();

} else {
int maxStale = 60 * 60 * 24 * 28; // tolerate 4-weeks stale
response.newBuilder()
.removeHeader("Pragma")
.header("Cache-Control", "public, only-if-cached, max-stale=" + maxStale)
.build();
}
return response;
}
};

;
...全文
1048 5 打赏 收藏 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
星海浮沉 2016-11-09
  • 打赏
  • 举报
回复
楼主,您好.你的没有网络的状态下,缓存的读取成功了吗?年代久远,你不会已经离职了吧?
coder_cp 2016-09-13
  • 打赏
  • 举报
回复
coder_cp 2016-09-13
  • 打赏
  • 举报
回复
是不是这个原因:http://blog.csdn.net/birdfly12345/article/details/52515806
jhg1204 2016-03-30
  • 打赏
  • 举报
回复
昨天遇到了相同的问题,结合网上的资料看了下源码,发现okhttp的缓存机制其实存在缺陷,也就是在某些情况下无法访问缓存,具体表现如下: 现在的APP在进行网络访问时,一般都会添加network和sign字段(根据访问的参数进行签名,参数不同,生成的签名也不同), 在进行网络访问时,比如参数中有network字段,就会出现缓存无法访问的情况,原因是如果你在wifi情况下访问时, 你的URL可能是这样的:www.example.com?network=wifi, 而在无网络状态下访问时,URL却是这样的:www.example.com?network= ,两次访问的URL不一样,所以的匹配缓存时,就会找不到URL对应的缓存数据,导致返回的数据为空。 解决办法: 使用okhttp中的DiskLruCache或ACache进行手动缓存;
Dyan_csdn 2016-03-30
  • 打赏
  • 举报
回复
请问解决了吗?同求

80,490

社区成员

发帖
与我相关
我的任务
社区描述
移动平台 Android
androidandroid-studioandroidx 技术论坛(原bbs)
社区管理员
  • Android
  • yechaoa
  • 失落夏天
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧