天天看点

Http标准协议Android网络框架——NoHttp

动态配置底层框架为OkHttp、HttpURLConnection

与RxJava完美结合,支持异步请求、支持同步请求

多文件上传,支持大文件上传,表单提交数据

文件下载、上传下载、上传和下载的进度回调、错误回调

支持Json、xml、Map、List的提交

完美的Http缓存模式,可指定缓存到数据库、SD卡,缓存数据已安全加密 

自定义Request,直接请求JsonObject、JavaBean等

Cookie的自动维持,App重启、关开机后还持续维持

http 301 302 303 304 307重定向,支持多层嵌套重定向

Https、自签名网站Https的访问、支持双向验证

失败重试机制,支持请求优先级

GET、POST、PUT、PATCH、HEAD、DELETE、OPTIONS、TRACE等请求协议

用队列保存请求,平均分配多线程的资源,支持多个请求并发

支持取消某个请求、取消指定多个请求、取消所有请求

如果使用HttpURLConnection作为网络层:

1

如果要使用OkHttp作为网络层,请再依赖:

如果使用HttpURLConnection作为网络层: 

<a href="https://github.com/yanzhenjie/NoHttp/blob/master/Jar/nohttp1.1.0.jar?raw=true" target="_blank">下载nohttp jar包</a>

如果使用OkHttp做为网络层

好多jar啊,所以强烈的999次方建议没有使用<code>AndroidStudio</code>的同学赶紧切换过来。

NoHttp初始化需要一个Context,最好在<code>Application</code>的<code>onCreate()</code>中初始化,记得在<code>manifest.xml</code>中注册<code>Application</code>。

直接初始化后,一切采用默认设置。

超时配置,默认10s

配置缓存,默认保存在数据库

配置Cookie保存的位置,默认保存在数据库

配置网络层

开启NoHttp的调试模式后可看到请求过程、日志和错误信息,基本不用抓包。可以看到请求头、请求数据、响应头、Cookie等,而且打印出的Log非常整齐。

所以说,如果你使用过程中遇到什么问题了,开启调试模式,一切妖魔鬼怪都会现形的。

RxJava 

可以与RxJava、RxAndroid、RxBus、EventBus等第三方异步任务框架完美结合使用,这里在demo中给出了和RxJava一起使用的代码。具体的封装请参考Demo的RxNoHttp。

添加请求到队列时有一个what,这个what会在<code>responseLisetener</code>响应时回调给开发者,所以开发者可以用一个<code>responseLisetener</code>接受多个请求的响应,用what来区分结果。而不用像有的框架一样,每一个请求都要new一个callback。

强烈建议把生成队列写成懒汉单例模式,因为每新建队列就会new出相应个数的线程来,同时只有线程数固定了,队列的作用才会发挥到最大。

文件上传实现了http表单的标准协议,满足了广大开发者的需求,有以下几种形式:

单个文件

上传多个文件、多个Key多个文件形式 

这里可以添加各种形式的文件,File、Bitmap、InputStream、ByteArray。

上传多个文件、一个Key多个文件形式

或者:

提交Body分为提交Json、提交String、提交Xml、提交流等,具体用法如下:

在当前线程发起请求,在线程这么使用。

NoHttp的缓存非常强大,支持缓存到数据库、换到SD卡等,并且不论缓存在数据库或者SD,NoHttp都把数据进行了加密,需要在初始化的时候配置缓存的位置。

1、Default模式,实现http 304重定向缓存 

NoHttp本身是实现了RFC2616,所以这里不用设置或者设置为DEFAULT。

2、 当请求服务器失败的时候,读取缓存 

请求服务器成功则返回服务器数据,如果请求服务器失败,读取缓存数据返回。

3、如果发现有缓存直接成功,没有缓存才请求服务器 

我们知道ImageLoader的核心除了内存优化外,剩下一个就是发现把内地有图片则直接使用,没有则请求服务器,所以NoHttp这一点非常使用做一个ImageLoader。

请求String,缓存String:

请求图片,缓存图片:

4、仅仅请求网络 

这里不会读取缓存,也不支持Http304。

5、仅仅读取缓存 

仅仅读取缓存,不会请求网络和其它操作。

因为下载文件代码比较多,这里贴关键部分,具体的请参考demo。

文件下载也是队列,队列和开头所说的请求的队列是一样的。

发起下载请求

暂停或者停止下载

监听下载过程

NoHttp支持取消某个请求、取消指定多个请求、取消所有请求。

取消单个请求 

直接调用请求对象的cancel方法。

从队列中取消指定的请求 

在请求之前给请求set一个sign,取消的时候调用队列的cancelBySign就可以取消掉所有指定这个sign的请求。

取消队列中所有请求

队列停止后再添加请求到队列后,请求不会被执行。

NoHttp的所有自带请求都是继承<code>RestRequest</code>类,所以我们自定义请求也需要继承<code>RestRequest</code>,泛型写自己想要请求的数据类型,最后在<code>parseResponse()</code>方法中解析服务器数据成自己自己想要的数据类型即可。 

* FastJsonRequest

JavaBeanRequest,利用FastJson、Gson等把数据直接转为JavaBean

使用自定义请求

NoHttp设计到兼容高版本系统的api采用反射调用,所以所有类都可以被混淆,如果你非要keep的话,如下配置即可。

原生NoHttp混淆

如果使用okhttp的版本

<code>-keep class okio.** { *;}</code>

<code></code>

<code>本文转自 一点点征服 博客园博客,原文链接:</code>http://www.cnblogs.com/ldq2016/p/NoHttp.html,如需转载请自行联系原作者