NoHttp 是专门做Android网络请求与下载的框架。
支持HTTP/HTTPS,自动维持Cookie,异步/同步请求,大文件/多文件上传,文件下载;支持304缓存,302/303重定向,支持代理服务器。
NoHttp特性:
支持HTTP/HTTPS,自动维持Cookie,异步/同步请求,大文件/多文件上传,文件下载,上传下载均有进度。
支持304缓存,自定义缓存,302/303重定向,支持代理服务器访问地址(如: Google)。
NoHttp是队列,自动为请求排队,可以取消指定请求, 可以取消队列所有请求,亦可以停止队列。
支持请求String、Bitmap、Json、JavaBean,可自定义扩展请求类型。
Request对象包涵参数、文件、请求头等;Response对象包涵响应内容,响应头等信息,Cookie。
使用Gradle构建时添加依赖:
compile 'com.yolanda.nohttp:nohttp:+'compile 'com.yolanda.nohttp:nohttp:1.0.0'
一. 请求
1.请求String数据
Request request = NoHttp.createStringRequest(url, requestMethod);request.addHeader("AppVersioin", "2.0");request.add("userName", "yolanda");request.add("file", new FileBinary(file));...
2.请求Json数据
Request request = NoHttp.createJsonObjectRequest(url, reqeustMethod);queue.add(what, request, responseListener);…Request request = NoHttp.createJsonArrayRequest(url, reqeustMethod);queue.add(what, request, responseListener);
3. 请求Bitmap数据
Request request = NoHttp.createImageRequest(url, requestMethod);...
4. 取消请求
取消单个请求
Request request = NoHttp.createStringRequest(url);...request.cancel();
从队列中取消指定的请求
Request request = NoHttp.createStringRequest(url);request.setCancelSign(sign);…queue.cancelBySign(sign);
取消队列中所有请求
queue.cancelAll();
停止队列
RequestQueue queue = NoHttp.newRequestQueue();...queue.stop();
5. 同步请求
Request request = NoHttp.createStringRequest(url);Response response = NoHttp.startRequestSync(request);if (response.isSucceed()) { } else { }
二. 缓存
1. Http标准协议的缓存,比如响应码是304时
现在很多公司使用了RESTFUL风格来写Http API,所以这个是必须有的。
Request request = NoHttp.createJsonObjectRequest(url);request.setCacheMode(CacheMode.DEFAULT);...
2. 当请求服务器失败的时候,读取缓存
Request request = NoHttp.createJsonObjectRequest(url);request.setCacheMode(CacheMode.REQUEST_FAILED_READ_CACHE);...
3. 如果发现有缓存直接成功,没有缓存才请求服务器
我们知道ImageLoader的核心除了内存优化外,剩下一个就是发现把内地有图片则直接使用,没有则请求服务器,所以NoHttp这一点非常使用做一个ImageLoader。
Request request = NoHttp.createJsonObjectRequest(url);request.setCacheMode(CacheMode.IF_NONE_CACHE_REQUEST);...
请求图片,缓存图片。
Request request = NoHttp.createImageRequest(imageUrl);request.setCacheMode(CacheMode.IF_NONE_CACHE_REQUEST);...
4. 仅仅读取缓存
Request request = NoHttp.createJsonObjectRequest(url);request.setCacheMode(CacheMode.ONLY_READ_CACHE);...
注意:缓存不管是String、Json、图片还是任何请求都可以被NoHttp缓存
二、响应
OnResponseListener responseListener = new OnResponseListener() { @Override public void onStart(int what) { } @Override public void onFinish(int what) { } @Override public void onSucceed(int what, Response response) { String result = response.get(); } @Override public void onFailed(int what, String url, Object tag, Exception exception, ...) { }};
三. 自定义请求类型: FastJsonRequest
1.定义请求对象
public class FastJsonRequest extends RestRequestor {public FastJsonRequest(String url) { super(url);}public FastJsonRequest(String url, RequestMethod requestMethod) { super(url, requestMethod);}@Overridepublic JSONObject parseResponse(String url, Headers headers, byte[] responseBody) { String result = StringRequest.parseResponseString(url, headers, responseBody); JSONObject jsonObject = null; if (!TextUtils.isEmpty(result)) { jsonObject = JSON.parseObject(result); } else { jsonObject = JSON.toJSON("{}"); } return jsonObject;}@Overridepublic String getAccept() { return "application/json;q=1";}}
2.使用自定义请求-和NoHttp默认请求没有区别
Request mRequest = new FastJsonRequest(url, requestMethod);queue.add(what, mRequest, responseListener);
五. 下载文件
发起下载请求
downloadRequest = NoHttp.createDownloadRequest(url, fielDir, fileName, true, false);CallServer.getDownloadInstance().add(0, downloadRequest, downloadListener);
暂停或者停止下载
downloadRequest.cancel();
监听下载过程
private DownloadListener downloadListener = new DownloadListener() { @Override public void onStart(int what, boolean resume, long preLenght, Headers header, long count) { } @Override public void onProgress(int what, int progress, long downCount) { } @Override public void onFinish(int what, String filePath) { } @Override public void onDownloadError(int what, StatusCode code, CharSequence message) { } @Override public void onCancel(int what) { }};