| 注册
请输入搜索内容

热门搜索

Java Linux MySQL PHP JavaScript Hibernate jQuery Nginx
jopen
9年前发布

对OkHttp进行封装,实现了只查询缓存,网络请求失败自动查询本地缓存等功能

原文  http://jcodecraeer.com/a/anzhuokaifa/androidkaifa/2015/1208/3760.html
 

就我个人的使用感觉而言,OkHttp算是用得最顺手的一个网络请求框架了,提供了拦截器 Interceptor ,可以很方便地在请求的时候做各种操作,比如添加请求头、url后面添加额外数据等,但是Android程序对于网络请求一般最好还是应该本地缓存请求的数据,在断网的时候可以在本地数据中读取展示出来,不致于一片空白,当然,关键数据还是应该从服务器获取,这个根据情况判断。

首先,OkHttp是允许在本地保存请求和结果的,通过设置 Cache-Control: max-age 可以设置缓存保存的时间,OkHttp可设置CacheControl.FORCE_CACHE或CacheControl.FORCE_NETWORK来让请求只从本地缓存获取或只从服务器获取,这里写了个工具,将请求的方式扩展到四种 

*ONLY_NETWORK 只查询网络数据

*ONLY_CACHED 只查询本地缓存

*CACHED_ELSE_NETWORK 先查询本地缓存,如果本地没有,再查询网络数据

*NETWORK_ELSE_CACHED 先查询网络数据,如果没有,再查询本地缓存

这样就可以根据场景需要在没网络的情况下加载本地数据(例如app首页的数据展示),使用方法也比较简单

okHttpUtils = new OKHttpUtils.Builder(this).build();  okHttpUtils.get("http://api.k780.com:88/?app=life.time&appkey=10003&sign=b59bc3ef6191eb9f747dd4e83c99f2a4&format=json", cacheType ,new Callback() {          @Override          public void onFailure(Request request, IOException e) {              Log.d("failed",e.toString());          }            @Override          public void onResponse(final Response response) throws IOException {              //  tv.setText(response.body().string());              Log.d("response", response.toString());              String str = response.body().string();              Log.d("response", str);          }      });

具体的用法参考 https://github.com/duzechao/OKHttpUtils

 本文由用户 jopen 自行上传分享,仅供网友学习交流。所有权归原作者,若您的权利被侵害,请联系管理员。
 转载本站原创文章,请注明出处,并保留原始链接、图片水印。
 本站是一个以用户分享为主的开源技术平台,欢迎各类分享!
 本文地址:https://www.open-open.com/lib/view/open1449752309191.html
OkHttp Android开发 移动开发