android OKHTTP 的缓存问题
来源:互联网 发布:移动2g网络可以上网吗 编辑:程序博客网 时间:2024/05/20 01:09
了解OKHTTP的缓存 可有助于我们使用retrofit picasso 等配合okhttp使用的框架。
到此。
okhttp中的缓存主要要在两个地方配置:
第一,在构造okhttpclient时 设置缓存路径
第二,在构造request时 配置缓存策略
一、缓存路径
OkHttpClient client = new OkHttpClient.Builder() .connectTimeout(5, TimeUnit.SECONDS) .cache(new Cache(new File(this.getExternalCacheDir(), "okhttpcache"), 10 * 1024 * 1024)) .build();从方法.cache ()可知,我们设置的应用路径为“~/mnt/sdcard/Android/data/应用包名/cache/okhttpcache” 最大缓存容量是10M 超过10M时会自动删除已缓存的数据。当没有网络连接时,会自动加载缓存中的数据。很方便。
发起网络请求 如下:
Request request = new Request.Builder().url("http://www.tngou.net/api/food/list?id=1").build(); client.newCall(request).enqueue(new Callback() { @Override public void onFailure(Call call, IOException e) { } @Override public void onResponse(Call call, Response response) throws IOException { if (response.isSuccessful()) { ********* } } });网络请求完后 可以在前面设置的目录下看到三个文件,如图
其中以.0结尾的文件缓存了http的响应头信息,以.1结尾的文件则缓存了我们下载的json数据,journal则是一个日志文件
这个时候如果关闭网络再去请求网络数据,就会直接从缓存中读取数据了。
二、缓存策略
配置缓存策略就是在构造request时,设置CacheControl, CacheControl有两种配置方式:
第一:构造CacheControl
CacheControl cc = new CacheControl.Builder() //不使用缓存,但是会保存缓存数据 //.noCache() //不使用缓存,同时也不保存缓存数据 // .noStore() //只使用缓存,(如果我们要加载的数据本身就是本地数据时,可以使用这个,不过目前尚未发现使用场景) //.onlyIfCached() //手机可以接收响应时间小于当前时间加上10s的响应 // .minFresh(10,TimeUnit.SECONDS) //手机可以接收有效期不大于10s的响应 // .maxAge(10,TimeUnit.SECONDS) //手机可以接收超出5s的响应 .maxStale(5,TimeUnit.SECONDS) .build(); Request request = new Request.Builder() .cacheControl(cc) .url("http://192.168.152.2:8080/cache").build();第二:使用cachecontrol中的常量
Request request = new Request.Builder() //强制使用网络 // .cacheControl(CacheControl.FORCE_NETWORK) //强制使用缓存 .cacheControl(CacheControl.FORCE_CACHE) .url("http://192.168.152.2:8080/cache").build();
到此。
0 0
- android OKHTTP 的缓存问题
- 关于OkHttp缓存post请求的问题
- Retrofit+okhttp 缓存的
- Okhttp的缓存优化
- 带缓存的Okhttp
- 一网打尽OkHttp中的缓存问题
- okhttp缓存问题详细讲解
- Retrofit+OKHttp实现缓存以及遇到的问题
- Android网络缓存,retrofit+okhttp
- OkHttp缓存功能的应用
- OkHttp框架缓存的缺陷
- okhttp的使用极其缓存
- 6.OkHttp的缓存管理
- OKHTTP缓存机制的学习
- Android OKHttp问题
- Android Okhttp缓存:精细化每一个Request的CacheControl缓存控制策略(二)
- OkHttp缓存
- OKhttp缓存
- 国际道教协会黄世真道长为《中华辟谷养生》题写序言!
- java中程序,进程和线程的区别
- shell编程笔记
- Relative Ranks
- openjudge 1.13 27:除以13
- android OKHTTP 的缓存问题
- linux C中调用shell命令和运行shell脚本
- 递归漫谈(一)
- leetcode 28. Implement strStr() 实现strStr()函数
- [PHP] 原生PHP使用递归方式实现数组转换成XML的功能之思考
- 成功的背后
- 深入理解JVM----JDK的命令行工具
- 优秀工程师的三个习惯
- C语言实现图的领接表表示6.1.2