Http标准协议Android网络框架——NoHttp
来源:互联网 发布:淘宝主持真的假的 编辑:程序博客网 时间:2024/06/08 00:52
版权声明:转载必须注明本文转自严振杰的博客: http://blog.csdn.net/yanzhenjie1003
目录(?)[+]
NoHttp详细文档:http://doc.nohttp.net
NoHttp公益测试接口:http://api.nohttp.net
支持与RxJava
完美结合、支持一句话切换底层为OkHttp
,支持缓存数据到数据库或SD卡和数据库,并对数据做了加密保护,支持请求Restful风格的接口,比Retrofit更简单易用。
欢迎加入QQ技术交流群:46523908
效果预览
框架特性
- 动态配置底层框架为OkHttp、HttpURLConnection
- 与RxJava完美结合,支持异步请求、支持同步请求
- 多文件上传,支持大文件上传,表单提交数据
- 文件下载、上传下载、上传和下载的进度回调、错误回调
- 支持Json、xml、Map、List的提交
- 完美的Http缓存模式,可指定缓存到数据库、SD卡,缓存数据已安全加密
- 在6.0以上手机缓存到SD卡时需要请求运行时权限:AndPermission
- 自定义Request,直接请求JsonObject、JavaBean等
- Cookie的自动维持,App重启、关开机后还持续维持
- http 301 302 303 304 307重定向,支持多层嵌套重定向
- Https、自签名网站Https的访问、支持双向验证
- 失败重试机制,支持请求优先级
- GET、POST、PUT、PATCH、HEAD、DELETE、OPTIONS、TRACE等请求协议
- 用队列保存请求,平均分配多线程的资源,支持多个请求并发
- 支持取消某个请求、取消指定多个请求、取消所有请求
使用方法
AndroidStudio使用方式
- 如果使用HttpURLConnection作为网络层:
- 1
- 1
- 如果要使用OkHttp作为网络层,请再依赖:
- 1
- 1
Eclipse使用方式
- 如果使用HttpURLConnection作为网络层:
- 下载nohttp jar包
如果使用OkHttp做为网络层
- 下载nohttp jar包:nohttp原生jar。
- 下载nohttp-okhttp jar包:nohttp和okhttp过渡,只有两个类。
- 下载okhttp jar包:okhttp原生jar。
- 下载okhttp-url jar包:okhttp和URLConnection的过度。
- 下载okio jar包:okio的包。
好多jar啊,所以强烈的999次方建议没有使用
AndroidStudio
的同学赶紧切换过来。
初始化
NoHttp初始化需要一个Context,最好在Application
的onCreate()
中初始化,记得在manifest.xml
中注册Application
。
一般初始化
直接初始化后,一切采用默认设置。
- 1
- 1
高级自定义初始化
- 超时配置,默认10s
- 1
- 2
- 3
- 4
- 5
- 6
- 1
- 2
- 3
- 4
- 5
- 6
- 配置缓存,默认保存在数据库
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 配置Cookie保存的位置,默认保存在数据库
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 配置网络层
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 1
- 2
- 3
- 4
- 5
- 6
- 7
需要的权限
- 1
- 2
- 3
- 4
- 5
- 1
- 2
- 3
- 4
- 5
友好的调试模式
- 1
- 2
- 1
- 2
开启NoHttp的调试模式后可看到请求过程、日志和错误信息,基本不用抓包。可以看到请求头、请求数据、响应头、Cookie等,而且打印出的Log非常整齐。
所以说,如果你使用过程中遇到什么问题了,开启调试模式,一切妖魔鬼怪都会现形的。
第三方异步框架
RxJava
可以与RxJava、RxAndroid、RxBus、EventBus等第三方异步任务框架完美结合使用,这里在demo中给出了和RxJava一起使用的代码。具体的封装请参考Demo的RxNoHttp。
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
请求队列
- 1
- 2
- 3
- 4
- 5
- 1
- 2
- 3
- 4
- 5
- 添加请求到队列时有一个what,这个what会在
responseLisetener
响应时回调给开发者,所以开发者可以用一个responseLisetener
接受多个请求的响应,用what来区分结果。而不用像有的框架一样,每一个请求都要new一个callback。 - 强烈建议把生成队列写成懒汉单例模式,因为每新建队列就会new出相应个数的线程来,同时只有线程数固定了,队列的作用才会发挥到最大。
请求类型
String请求
- 1
- 2
- 1
- 2
Json请求
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 1
- 2
- 3
- 4
- 5
- 6
- 7
Bitmap请求
- 1
- 2
- 1
- 2
请求FastJson与Gson
- 1
- 2
- 3
- 1
- 2
- 3
直接请求JavaBean
- 1
- 2
- 3
- 1
- 2
- 3
添加参数
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
文件上传实现了http表单的标准协议,满足了广大开发者的需求,有以下几种形式:
- 单个文件
- 1
- 2
- 1
- 2
- 上传多个文件、多个Key多个文件形式
这里可以添加各种形式的文件,File、Bitmap、InputStream、ByteArray。
- 1
- 2
- 3
- 4
- 5
- 6
- 1
- 2
- 3
- 4
- 5
- 6
- 上传多个文件、一个Key多个文件形式
- 1
- 2
- 3
- 4
- 5
- 1
- 2
- 3
- 4
- 5
或者:
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
提交请求包体
提交Body分为提交Json、提交String、提交Xml、提交流等,具体用法如下:
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
同步请求
在当前线程发起请求,在线程这么使用。
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 1
- 2
- 3
- 4
- 5
- 6
- 7
五大缓存模式
NoHttp的缓存非常强大,支持缓存到数据库、换到SD卡等,并且不论缓存在数据库或者SD,NoHttp都把数据进行了加密,需要在初始化的时候配置缓存的位置。
需要注意的是,在6.0以上的手机中如果要缓存在SD卡,需要在请求之前,需要请求运行时权限,如果你不懂运行时权限,可以看这个项目:AndPermission。
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 1、Default模式,实现http 304重定向缓存
NoHttp本身是实现了RFC2616,所以这里不用设置或者设置为DEFAULT。
- 1
- 2
- 1
- 2
- 2、 当请求服务器失败的时候,读取缓存
请求服务器成功则返回服务器数据,如果请求服务器失败,读取缓存数据返回。
- 1
- 2
- 1
- 2
- 3、如果发现有缓存直接成功,没有缓存才请求服务器
我们知道ImageLoader的核心除了内存优化外,剩下一个就是发现把内地有图片则直接使用,没有则请求服务器,所以NoHttp这一点非常使用做一个ImageLoader。
请求String,缓存String:
- 1
- 2
- 3
- 1
- 2
- 3
请求图片,缓存图片:
- 1
- 2
- 1
- 2
- 4、仅仅请求网络
这里不会读取缓存,也不支持Http304。
- 1
- 2
- 3
- 1
- 2
- 3
- 5、仅仅读取缓存
仅仅读取缓存,不会请求网络和其它操作。
- 1
- 2
- 1
- 2
文件下载
因为下载文件代码比较多,这里贴关键部分,具体的请参考demo。
文件下载也是队列,队列和开头所说的请求的队列是一样的。
- 发起下载请求
- 1
- 2
- 3
- 4
- 5
- 6
- 1
- 2
- 3
- 4
- 5
- 6
- 暂停或者停止下载
- 1
- 1
- 监听下载过程
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
取消请求
NoHttp支持取消某个请求、取消指定多个请求、取消所有请求。
- 取消单个请求
直接调用请求对象的cancel方法。
- 1
- 1
- 从队列中取消指定的请求
在请求之前给请求set一个sign,取消的时候调用队列的cancelBySign就可以取消掉所有指定这个sign的请求。
- 1
- 2
- 3
- 4
- 5
- 6
- 1
- 2
- 3
- 4
- 5
- 6
- 取消队列中所有请求
- 1
- 1
停止队列
队列停止后再添加请求到队列后,请求不会被执行。
- 1
- 2
- 3
- 4
- 1
- 2
- 3
- 4
自定义请求
NoHttp的所有自带请求都是继承RestRequest
类,所以我们自定义请求也需要继承RestRequest
,泛型写自己想要请求的数据类型,最后在parseResponse()
方法中解析服务器数据成自己自己想要的数据类型即可。
* FastJsonRequest
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- JavaBeanRequest,利用FastJson、Gson等把数据直接转为JavaBean
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 使用自定义请求
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
代码混淆
NoHttp设计到兼容高版本系统的api采用反射调用,所以所有类都可以被混淆,如果你非要keep的话,如下配置即可。
- 原生NoHttp混淆
- 1
- 2
- 1
- 2
- 如果使用okhttp的版本
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- Http标准协议Android网络框架——NoHttp
- Http标准协议Android网络框架——NoHttp
- Http标准协议Android网络框架——NoHttp
- Http标准协议Android网络框架——NoHttp
- Android-NoHttp网络框架
- NoHttp使用简析——Android网络请求框架(二)
- Android网络请求框架NoHttp简介
- Android网络请求框架NoHttp简介
- Android网络请求框架NoHttp简介
- 网络框架-NoHttp
- Android网络框架综述(一)OkHttp、NoHttp、Volley
- Android 网络框架_网络框架的核心Http协议
- Android—使用Http协议访问网络
- NoHttp—联网第三方,流行http库
- Android使用Http协议访问网络——HttpConnection
- Android使用HTTP协议访问网络——HttpClient
- 传送门:一个有情怀的Android网络框架之NoHttp
- NoHttp框架
- 解说mysql之binlog日志以及利用binlog日志恢复数据
- Java开发常用工具类
- leetcode-- Excel Sheet Column Number
- 【泛型】类型通配声明
- Git 分支管理
- Http标准协议Android网络框架——NoHttp
- JAVA邮件发送的简单实现
- Pixhawk_Ardupilot_Makefile文件调用关系
- fir.im Weekly - 聊聊 Google 开发者大会
- Latex--入门系列三
- Mysql主从复制安装笔记
- Pascal's Triangle II
- 一:Hibernate简介
- 【redis】一、redis3.2.6安装介绍