RxHttp 让你眼前一亮的Http请求框架

1、前言RxHttp在今年4月份一经推出,就受到了广大Android 开发者的喜爱,截止本文发表在github上已有1100+star,为此,我自己也建个RxHttp&RxLife 的群(群号:378530627)目前群里也有将近120号人,里面有不少小伙伴提了很多有价值的创意,才使得RxHttp一直坚持走到了现在,在此,感谢大家的喜爱 。
这期间,一直有人问我,retrofit不香吗?之前不知道该如何回答这个问题,现在我想说,香!!retrofit无疑是目前综合得分最高的选手,但它也有它的不足 。
RxHttp相较于retrofit,功能上,两者均能实现,并无多大差异,更多的差异体现功能的使用上,也就是易用性,如对文件上传/下载/进度监听的操作上,RxHttp用及简的API,可以说碾压retrofit;另外在baseUrl、公共参数/请求头、请求加解密等功能上的易用性都要优于retrofit;然而这些,个人觉得都不算什么,个人觉得RxHttp最大的优势在于它近乎为0的上手成本、极简的API以及高扩展性,看完这篇文章,相信你会有同感 。
那RxHttp就没有缺点吗?有,那就是它的稳定性目前还不如retrofit,毕竟RxHttp刚出道8个月,且全部是我一个人在维护,当然,并不是说RxHttp不稳定,RxHttp未开源前,已经在实际项目中使用了近2年,接着今年4月份将其开源,至今大大小小已迭代20多个版本,目前用的人也不在少数,可以说很稳定了 。
 
2、简介RxHttp是基于OkHttp的二次封装,并与RxJAVA做到无缝衔接,一条链就能发送任意请求 。主要优势如下:
1. 支持Gson、Xml、ProtoBuf、FastJson等第三方数据解析工具
2. 支持Get、Post、Put、Delete等任意请求方式,可自定义请求方式
3. 支持在Activity/Fragment/View/ViewModel/任意类中,自动关闭请求
4. 支持统一加解密,且可对单个请求设置是否加解密
5. 支持添加公共参数/头部,且可对单个请求设置是否添加公共参数/头部
6. 史上最优雅的实现文件上传/下载及进度的监听,且支持断点下载
7. 史上最优雅的对错误统一处理,且不打破Lambda表达式
8. 史上最优雅的处理多个BaseUrl及动态BaseUrl
9. 史上最优雅的处理网络缓存
10. 30秒即可上手,学习成本极低
gradle依赖
implementation 'com.rxjava.rxhttp:rxhttp:1.3.6'//注解处理器,生成RxHttp类,即可一条链发送请求annotationProcessor 'com.rxjava.rxhttp:rxhttp-compiler:1.3.6'//管理RxJava及生命周期,Activity/Fragment 销毁,自动关闭未完成的请求implementation 'com.rxjava.rxlife:rxlife:1.1.0'//非必须 根据自己需求选择ConverterRxHttp默认内置了GsonConverterimplementation 'com.rxjava.rxhttp:converter-jackson:1.3.6'implementation 'com.rxjava.rxhttp:converter-fastjson:1.3.6'implementation 'com.rxjava.rxhttp:converter-protobuf:1.3.6'implementation 'com.rxjava.rxhttp:converter-simplexml:1.3.6'注:kotlin用户,请使用kapt替代annotationProcessor
缓存功能,请查看:RxHttp 全网Http缓存最优解
3、使用3.1、准备工作RxHttp 要求项目使用Java 8,请在 App 的 build.gradle 文件中添加以下代码
compileOptions {sourceCompatibility JavaVersion.VERSION_1_8targetCompatibility JavaVersion.VERSION_1_8}此时,再Rebuild一下项目(通过Rebuild生成RxHttp类),就可以开始RxHttp的入坑之旅
3.2、配置默认的BaseUrl通过@DefaultDomain注解配置默认域名,如下:
public class Url {@DefaultDomain //设置为默认域名public static String baseUrl = "https://www.wanandroid.com/";}此步骤是非必须的,这里先介绍@DefaultDomain注解的用法,更多有关域名的介绍,请查看本文3.6章节----多域名/动态域名
3.3、请求三部曲先来看看如何发送一个最简单的请求,如下
RxHttp.get("http://...")//第一步, 通过get、postXxx、putXxx等方法,确定请求类型.asString()//第二步, 通过asXxx系列方法,确定返回数据类型.subscribe(s -> {//第三步, 订阅回调(此步骤同RxJava订阅观察者)//请求成功}, throwable -> {//请求失败});是的,不用怀疑,就是这么简单,重要的事情说3遍
任意请求,任意返回数据类型,皆遵循请求三部曲
任意请求,任意返回数据类型,皆遵循请求三部曲
任意请求,任意返回数据类型,皆遵循请求三部曲
到这,你已经掌握了RxHttp的精髓,我们只需牢记请求三部曲,使用RxHttp就会得心应手 。
3.3.1、第一部曲:确定请求类型RxHttp内部共提供了14个请求方法,如下:
RxHttp.get(String)//get请求参数拼接在url后面RxHttp.head(String)//head请求参数拼接在url后面RxHttp.postForm(String)//post请求参数以{application/x-www-form-urlencoded}形式提交RxHttp.postJson(String)//post请求参数以{application/json; charset=utf-8}形式提交,发送Json对象RxHttp.postJsonArray(String)//post请求参数以{application/json; charset=utf-8}形式提交,发送Json数组RxHttp.putForm(String)//put请求参数以{application/x-www-form-urlencoded}形式提交RxHttp.putJson(String)//put请求参数以{application/json; charset=utf-8}形式提交,发送Json对象RxHttp.putJsonArray(String)//put请求参数以{application/json; charset=utf-8}形式提交,发送Json数组RxHttp.patchForm(String)//patch请求参数以{application/x-www-form-urlencoded}形式提交RxHttp.patchJson(String)//patch请求参数以{application/json; charset=utf-8}形式提交,发送Json对象RxHttp.patchJsonArray(String)//patch请求参数以{application/json; charset=utf-8}形式提交,发送Json数组RxHttp.deleteForm(String)//delete请求 参数以{application/x-www-form-urlencoded}形式提交RxHttp.deleteJson(String)//delete请求 参数以{application/json; charset=utf-8}形式提交,发送Json对象RxHttp.deleteJsonArray(String)//delete请求 参数以{application/json; charset=utf-8}形式提交,发送Json数组


推荐阅读