对OkHttp进行封装,实现了只查询缓存,网络请求失败自动查询本地缓存等功能
就我个人的使用感觉而言,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 自行上传分享,仅供网友学习交流。所有权归原作者,若您的权利被侵害,请联系管理员。
转载本站原创文章,请注明出处,并保留原始链接、图片水印。
本站是一个以用户分享为主的开源技术平台,欢迎各类分享!