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

jopen 9年前

 

就我个人的使用感觉而言,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