JWHttpWrapper
Introduction: 基于 OKHttp 的网络库,底层依赖很小,只有一个文件依赖于 OKhttp, 可以快速切换为其它网络库。支持本地文件缓存以及多样化的缓存方式。自定义 Interceptor。可以拦截数据进行处理请求返回数据处理在单独现成进行,提供的回调方法在 UI 现成进行,可以直接用返回的数据更新 UI支持发送请求的时候设置 Tag, 然后单个或者批量取消请求
Tags:
网络请求-JWHttpWrapper 主要功能
- 基于 OKHttp 的网络库,底层依赖很小,只有一个文件依赖于 OKhttp, 可以快速切换为其它网络库。
- 支持本地文件缓存以及多样化的缓存方式。
- 自定义 Interceptor。可以拦截数据进行处理
- 请求返回数据处理在单独现成进行,提供的回调方法在 UI 现成进行,可以直接用返回的数据更新 UI
- 支持发送请求的时候设置 Tag, 然后单个或者批量取消请求
- 支持进度提示
使用说明
- 初始化
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();//取消所有请求