JWHttpWrapper

Project Url: jclick/JWHttpWrapper
Introduction: 基于 OKHttp 的网络库,底层依赖很小,只有一个文件依赖于 OKhttp, 可以快速切换为其它网络库。支持本地文件缓存以及多样化的缓存方式。自定义 Interceptor。可以拦截数据进行处理请求返回数据处理在单独现成进行,提供的回调方法在 UI 现成进行,可以直接用返回的数据更新 UI支持发送请求的时候设置 Tag, 然后单个或者批量取消请求
More: Author   ReportBugs   DemoAPK   
Tags:
网络请求-

JWHttpWrapper 主要功能

  1. 基于 OKHttp 的网络库,底层依赖很小,只有一个文件依赖于 OKhttp, 可以快速切换为其它网络库。
  2. 支持本地文件缓存以及多样化的缓存方式。
  3. 自定义 Interceptor。可以拦截数据进行处理
  4. 请求返回数据处理在单独现成进行,提供的回调方法在 UI 现成进行,可以直接用返回的数据更新 UI
  5. 支持发送请求的时候设置 Tag, 然后单个或者批量取消请求
  6. 支持进度提示

使用说明

  • 初始化
RequestConfig config = new RequestConfig.Builder(this).logEnable(true).cacheMode(RequestConfig.HttpCacheMode.NO_CACHE)
                .baseUrl("http://ip.taobao.com/").cacheTimeInSeconds(3 * 60).connectionTimeOut(30 *1000).build();
HttpRequestAgent.getInstance().init(config);
  • 发送请求
    RequestParams params = new RequestParams.Builder().requestParams(requestParams).url("service/getIpInfo.php").cacheMode(RequestConfig.HttpCacheMode.ALWAYS_CACHE).post().build();
    HttpRequestAgent.getInstance().executeRequest(params, callback);
    
  • 缓存设置
    ALWAYS_CACHE,//缓存时间内,不发请求,直接返回缓存结果
    CACHE_FIRST,//优先返回缓存结果,然后发送请求.(总共返回二次数据)
    FAILED_SHOW_CACHE,//请求失败后展示缓存
    CACHE_WHEN_NO_NETWORK//没有网络的时候展示缓存
    
  • Interceptor 使用

    RequestConfig config = new RequestConfig.Builder(this).logEnable(true).cacheMode(RequestConfig.HttpCacheMode.NO_CACHE)
                  .baseUrl("http://ip.taobao.com/").addInterceptor(new HandlerInterceptor() {
                      @Override
                      public boolean preHandler(RequestParams params) {
                          //TODO 请求之前的拦截  返回值决定是否继续请求
                          return true;
                      }
    
                      @Override
                      public void postSuccessHandler(RequestParams params, int statusCode, Map<String, List<String>> headers) {
                          //TODO  请求成功的拦截
                      }
    
                      @Override
                      public void postFailedHandler(IOException exception) {
                          //TODO 请求失败的拦截器
                      }
    
                      @Override
                      public void afterCompletion(RequestParams params, ResponseData<String> responseData) {
                          //TODO 请求逻辑处理完毕的回调
                      }
                  }).cacheTimeInSeconds(3 * 60).connectionTimeOut(30 *1000).build());
    
  • 返回数据

    返回数据结果为 ResponseData 类型, 可以对象序列化直接返回 JavaBean,只需要设置 Callback 为 ObjectCallback,例如:

 ObjectCallback<DemoResultBean<Location>> objCallback = new ObjectCallback<DemoResultBean<Location>>(new TypeReference<DemoResultBean<Location>>(){}) {
        @Override
        protected void onResponse(ResponseData<DemoResultBean<Location>> responseData) {
            if (responseData.isSuccess()){
                if (responseData.isFromCache()){
                    tvCacheResult.setText(responseData.toString());
                }else{
                    tvRequestResult.setText(responseData.toString());
                }
            }else{
                Toast.makeText(MainActivity.this, responseData.getDescription(), Toast.LENGTH_LONG).show();
            }
        }

        @Override
        public void onProgress(long bytesWritten, long totalSize) {
            super.onProgress(bytesWritten, totalSize);
            //TODO  you can update ui here
        }
    }

支持设置文件路径,直接下载生成为文件

fileCallback = new FileCallback(downloadFile.getAbsolutePath()) {
            @Override
            protected void onResponse(ResponseData<File> responseData) {
                File file = responseData.getData();
                if (responseData.isSuccess()){
                    if (responseData.isFromCache()){
                        tvCacheResult.setText(responseData.toString() + "\n 文件最后修改时间" + new Date(file.lastModified()) + "\n 文件路径:" + file.getAbsolutePath());
                    }else{
                        tvRequestResult.setText(responseData.toString() + "\n 文件最后修改时间" + new Date(file.lastModified()) + "\n 文件路径:" + file.getAbsolutePath());
                    }
                }else{
                    Toast.makeText(MainActivity.this, responseData.getDescription(), Toast.LENGTH_LONG).show();
                }
            }

            @Override
            public void onProgress(long bytesWritten, long totalSize) {
                super.onProgress(bytesWritten, totalSize);
            }
        };
  • 取消请求
HttpRequestAgent.getInstance().interruptRequestByTag(tag1, tag2, tag3);//取消设置这三个 tag 的请求
HttpRequestAgent.getInstance().interruptAllRequest();//取消所有请求
Apps
About Me
GitHub: Trinea
Facebook: Dev Tools