NoHttp是一个开源的Android网路框架,代码託管在Github。 支持并发,支持异步/同步请求,自动维持Cookie,大档案/多档案上传,档案下载。支持304快取,302/303重定向,支持通过代理请求。
NoHttp提供了jar包、源码、gradle依赖等方式给开发者使用,开发者可以根据自身情况进行选择。
NoHttp支持Android2.2及以上版本,内部使用HttpURLConnection请求网路,为OkHttp提供了接口,可以把HttpURLConnection替换为OkHttp作为socket层,不过Android4.4以上内部HttpURLConnection已经是用OkHttp实现了。
NoHttp是基于伫列的形式请求,可以取消某个请求,可以取消某几个指定请求,可以通过伫列取消所有请求。
NoHttp旨在为开发者提供一个简单、方便、高效、功能全、体积小的http网路框架。
基本介绍
- 中文名NoHttp
- 外文名NoHttp
- 作者YOLANDA
- 是否开源是
- 适用平台Android
- 定位最好用的Android网路框架
历史发展
NoHttp最早是使用Httpclient做了些简单的封装,只是在公司内部使用。后来随着Android弃用了Httpclient后,NoHttp换用HttpURLConnection做了封装,直到Android6.0时Android SDK删除了HttpClient的api后才真正的有了NoHttp。于是做了大量的重构工作,把NoHttp从项目中独立出来,做了开源。
在Android4.4开始系统的HttpURLConnection使用OkHttp的接口实现,NoHttp也对OkHttp做了支持,所以NoHttp是支持Android2.2-以上版本的。
目前NoHttp的源码託管在Github上,提供了源码、jar包、demo、gradle依赖等使用方式,作者建立了QQ谘询群,也在CSDN上开了部落格介绍NoHttp的各种使用方法与问题解答,所以对于国内的开发者来说是一个不错的选择。
特性
- 支持HTTP/HTTPS,自动维持Cookie,异步/同步请求,大档案/多档案上传,档案下载。
- 支持304快取,302/303重定向,支持通过代理伺服器访问地址。
- NoHttp是伫列,自动为请求排队,可以取消指定请求,可以取消伫列所有请求,亦可以停止伫列。
- 支持请求String、Bitmap、JsonObject、可自定义扩展请求类型(demo中的FastJsonRequest等)
- API使用简单,Request对象包涵参数、档案、请求头等;Response对象包涵回响内容, 回响头等信息。
发起请求
创建请求伫列
RequestQueue queue = NoHttp.newRequestQueue();
请求String数据
Request<String> request = NoHttp.createStringRequest(url);request.add("userName", "yolanda");request.add("file", new FileBinary(file));queue.add(0, request, responseListener);
请求Bitmap数据
Request<Bitmap> request = NoHttp.createImageRequest(url);queue.add(what, request, responseListener);
请求Json数据
// JsonObjectRequest<JSONObject> request = NoHttp.createJsonObjectRequest(url);queue.add(what, request, responseListener);...// JsonArrayRequest<JSONArray> request = NoHttp.createJsonArrayRequest(url);queue.add(what, request, responseListener);
子执行绪同步请求
// 在当前执行绪发起请求,线上程这幺使用Request<String> request = NoHttp.createStringRequest(url);Response<String> response = NoHttp.startRequestSync(request);if (response.isSucceed()) { // 请求成功} else { // 请求失败}
接受请求结果
以接受String结果为例,其它雷同
OnResponseListener<String> responseListener = new OnResponseListener<>() { // 请求开始时,可以显示一个Dialog public void onStart(int what) {} // 请求接受时,关闭Dialog public void onFinish(int what) {} // 接受请求结果 public void onSucceed(int what, Response<String> response) { // 拿到请求结果 String result = response.get(); } // 请求失败或者发生异常 public void onFailed(int what, String url, String error) {}};
取消请求
取消单个请求
Request<String> request = NoHttp.createStringRequest(url);...request.cancel();
取消伫列中的指定请求
Request<String> request = NoHttp.createStringRequest(url);request.setCancelSign(sign);...queue.cancelBySign(sign);// 取消用sign标誌的请求
取消所有请求
queue.cancelAll();
停止伫列
queue.stop();
档案下载模组
创建下载伫列
RequestQueue queue = NoHttp.newDownloadRequestQueue();
发起下载请求
//下载档案DownloadRequest downloadRequest = NoHttp.createDownloadRequest(url);// what 区分下载// downloadRequest 下载请求对象// downloadListener 下载监听queue.add(0, downloadRequest, downloadListener);
暂停/停止下载
downloadRequest.cancel();
监听下载过程/进度
private DownloadListener downloadListener = new DownloadListener() { // 开始下载 public void onStart(int what, Headers header, long count) {} // 下载进度变化 public void onProgress(int what, int progress, long downCount) { // progress就是进度值 } // 下载完成 public void onFinish(int what, String filePath) {} // 下载出错 public void onDownloadError(int what, String error) {} // 下载暂停或者取消 public void onCancel(int what) {}};