对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