开胃菜
话不多说,30s倒计时开始,先来看看如何发送一个Get请求,如下:
RxHttp.get("http://...") //第一步,确定请求类型,可以选择postForm、postJson等方法
.asString() //第二步,确定返回类型,这里返回String类型
.subscribe(s -> { //第三步,订阅观察者,第二步返回Observable对象
//请求成功
}, throwable -> {
//请求失败
});
Ok,倒计时结束!!! 到这,你已经学会了RxHttp的精髓。
是的,不用怀疑,就是这么简单,使用RxHttp,任意请求,任意返回数据类型,都遵循这三个步骤,我们称之为请求三部曲,如下:
重要事情说3遍
任意请求,任意返回数据类型,皆遵循请求三部曲
任意请求,任意返回数据类型,皆遵循请求三部曲
任意请求,任意返回数据类型,皆遵循请求三部曲
gradle依赖
OkHttp 3.14.x以上版本, 最低要求为API 21,如你想要兼容21以下,请依赖OkHttp 3.12.x,该版本最低要求 API 9
asXxx方法内部是通过RxJava实现的,而RxHttp 2.2.0版本起,内部已剔除RxJava,如需使用,请自行依赖RxJava并告知RxHttp依赖的Rxjava版本
1、必选
将jitpack
添加到项目的build.gradle
文件中,如下:
allprojects {
repositories {
maven { url "https://jitpack.io" }
}
}
注:RxHttp 2.6.0版本起,已全面从JCenter迁移至jitpack
//使用kapt依赖rxhttp-compiler时必须
apply plugin: 'kotlin-kapt'
android {
//必须,java 8或更高
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
}
}
dependencies {
implementation 'com.github.liujingxing.rxhttp:rxhttp:2.6.0'
implementation 'com.squareup.okhttp3:okhttp:4.9.0' //rxhttp v2.2.2版本起,需要手动依赖okhttp
kapt 'com.github.liujingxing.rxhttp:rxhttp-compiler:2.6.0' //生成RxHttp类,纯Java项目,请使用annotationProcessor代替kapt
}
2、可选
android {
defaultConfig {
javaCompileOptions {
annotationProcessorOptions {
arguments = [
rxhttp_package: 'rxhttp', //非必须,指定RxHttp类包名
//传入你依赖的rxjava版本,可传入rxjava2、rxjava3,依赖RxJava时必须
rxhttp_rxjava: 'rxjava3'
]
}
}
}
}
dependencies {
implementation 'com.github.liujingxing.rxlife:rxlife-coroutine:2.1.0' //管理协程生命周期,页面销毁,关闭请求
//rxjava2 (RxJava2/Rxjava3二选一,使用asXxx方法时必须)
implementation 'io.reactivex.rxjava2:rxjava:2.2.8'
implementation 'io.reactivex.rxjava2:rxandroid:2.1.1'
implementation 'com.github.liujingxing.rxlife:rxlife-rxjava2:2.1.0' //管理RxJava2生命周期,页面销毁,关闭请求
//rxjava3
implementation 'io.reactivex.rxjava3:rxjava:3.0.6'
implementation 'io.reactivex.rxjava3:rxandroid:3.0.0'
implementation 'com.github.liujingxing.rxlife:rxlife-rxjava3:2.1.0' //管理RxJava3生命周期,页面销毁,关闭请求
//非必须,根据自己需求选择 RxHttp默认内置了GsonConverter
implementation 'com.github.liujingxing.rxhttp:converter-fastjson:2.6.0'
implementation 'com.github.liujingxing.rxhttp:converter-jackson:2.6.0'
implementation 'com.github.liujingxing.rxhttp:converter-moshi:2.6.0'
implementation 'com.github.liujingxing.rxhttp:converter-protobuf:2.6.0'
implementation 'com.github.liujingxing.rxhttp:converter-simplexml:2.6.0'
}
最后,rebuild一下(此步骤是必须的) ,就会自动生成RxHttp类
三部曲解说
到这里相信很多人已经有疑问了
- 如果我想发送Post等其它方式请求呢?
- 文件上传下载及进度的监听呢?
- 我想得到自定义的数据类型呢?
这些如何通过三部曲实现呢?别着急,接下来一一为大家讲解
第一步,确定请求方式
上面例子中,我们调用了RxHttp.get("http://...")
语句,其中get
操作符就代表Get请求。由此,我们可以猜测,发送Post请求,只需要调用post
操作符即可。然而我们只猜对了一半,为啥这么说呢?Post请求中,我们常见的又分为两种,一种的表单形式的Post,另一种是Json字符串形式的Post。为此,RxHttp提供了两个发送Post请求的操作符,分别是postForm
和postJosn
,此时,我们就可以这样发送Post请求
RxHttp.postForm("http://...") //发送表单形式的Post请求
.asString() //返回String类型
.subscribe(s -> { //订阅观察者,
//请求成功
}, throwable -> {
//请求失败
});
RxHttp.postJson("http://...") //发送Json字符串单形式的Post请求
.asString() //返回String类型
.subscribe(s -> { //订阅观察者,
//请求成功
}, throwable -> {
//请求失败
});
如果想发送Delete、Put等其它方式的请求,同理,如下:
RxHttp.deleteForm("http://...")
RxHttp.deleteJson("http://...")
RxHttp.putForm("http://...")
RxHttp.putJson("http://...")
//其它请求方式同上
最后,我们来看下,RxHttp都提供了哪些请求方式,如下:其中
get
、postForm
、postJson
上面已经讲过了,其它的同理,这里就不再讲述了。
请求方式确定了,如何添加参数或者头像信息呢?so easy!!!,只需调用add
、addHeader
即可,如下:
RxHttp.postForm("http://...") //发送表单形式的Post请求
.add("key","value") //添加请求参数,该方法可调用多次
.addHeader("headerKey","headerValue") //添加请求头参数,该方法可调用多次
.asString() //返回String类型
.subscribe(s -> { //订阅观察者,
//请求成功
}, throwable -> {
//请求失败
});
第二步,确定返回数据类型
上面的asString
操作符代表返回String字符串类型,RxHttp提供了一系列asXXX
操作符,如下:
其中,asBoolean、asInteger、asLong、asString等,很好理解,就是返回基本类型的装箱类型,。这个不就过多讲解。这里我们重点看下
asClass
、asList
、asDownload
这3个操作符。
asClass
显示开发中,我们返回的更多是自定义的数据类型,比如我们想得到一个Student对象,此时,我们就可以用asClass
操作符,如下:
RxHttp.get("http://...") //发送Get请求
.asClass(Student.class) //指定返回User类型数据
.subscribe(student -> { //订阅观察者,
//请求成功,这里student就是Student对象
}, throwable -> {
//请求失败
});
asList
然而,如果我们想得到一系列Student对象呢?使用asObject显然行不通,此时就要用到asList
操作符了,如下:
RxHttp.get("http://...") //发送Get请求
.asList(Student.class) //指定返回User类型数据
.subscribe(students -> { //订阅观察者,
//请求成功,这里students就是List<Student>对象
}, throwable -> {
//请求失败
});
注:asXXX操作符,内部会默认指定请求在
Schedulers.io()
线程执行
asDownload
当我们需要下载文件,就用此操作符,如下:
RxHttp.get("http://...") //Get请求
.asDownload(".../rxhttp.apk") //使用asDownload操作符,并传入存储路径
.subscribe(s -> {
//下载成功回调,s为文件存储路径
}, throwable -> {
//下载失败回调
});
更多文件操作,请查看Android 史上最优雅的实现文件上传、下载及进度的监听
第三步,订阅观察者
在上一步中,细心的你也许发现了,使用了asXXX
操作符后,会返回一个Observable
对象,那这个又是什么对象呢?其实它就是RxJava内部的Observable
对象。
在这,可以告诉你,当我们调用asXXX
操作符,拿到Observable
对象后,RxHttp就已经完成了它的使命,接下来的事情都丢给了RxJava。拿到Observable
对象,结合RxJava强大的操作符,我们可以做非常多的事情,比如我们想要在主线程回调观察者,如下:
RxHttp.get("http://...") //发送Get请求
.asList(Student.class) //指定返回User类型数据
.observeOn(AndroidSchedulers.mainThread()) //主线程回调观察者
.subscribe(students -> { //订阅观察者,
//请求成功,这里students就是List<Student>对象
}, throwable -> {
//请求失败
});
注:请求默认在Schedulers.io()线程执行,如未指定观察者所在线程,则默认在请求所在线程回调
小结
好了,请求三部曲就讲解结束,到这,你已经掌握了RxHttp 70% 的功能,并且掌握了RxHttp的精髓----请求三部曲,在任意请求中,就能做到以不变应万变。 本篇文章的目的在于提供一个简单的入门教程,更多功能请查看
RxHttp 完美适配Android 10/11 上传/下载/进度监听
在使用过程中,如遇到什么问题,环境加群交流RxHttp&RxLife 交流群:378530627
最后
按照国际惯例,给大家分享一套十分好用的Android进阶资料:《全网最全Android开发笔记》。
整个笔记一共8大模块、729个知识点,3382页,66万字,可以说覆盖了当下Android开发最前沿的技术点,和阿里、腾讯、字节等等大厂面试看重的技术。
因为所包含的内容足够多,所以,这份笔记不仅仅可以用来当学习资料,还可以当工具书用。
如果你需要了解某个知识点,不管是Shift+F 搜索,还是按目录进行检索,都能用最快的速度找到你要的内容。
相对于我们平时看的碎片化内容,这份笔记的知识点更系统化,更容易理解和记忆,是严格按照整个知识体系编排的。
(一)架构师必备Java基础
1、深入理解Java泛型
2、注解深入浅出
3、并发编程
4、数据传输与序列化
5、Java虚拟机原理
6、高效IO
……
(二)设计思想解读开源框架
1、热修复设计
2、插件化框架设计
3、组件化框架设计
4、图片加载框架
5、网络访问框架设计
6、RXJava响应式编程框架设计
……
(三)360°全方位性能优化
1、设计思想与代码质量优化
2、程序性能优化
- 启动速度与执行效率优化
- 布局检测与优化
- 内存优化
- 耗电优化
- 网络传输与数据储存优化
- APK大小优化
3、开发效率优化
- 分布式版本控制系统Git
- 自动化构建系统Gradle
……
(四)Android框架体系架构
1、高级UI晋升
2、Android内核组件
3、大型项目必备IPC
4、数据持久与序列化
5、Framework内核解析
……
(五)NDK模块开发
1、NDK开发之C/C++入门
2、JNI模块开发
3、Linux编程
4、底层图片处理
5、音视频开发
6、机器学习
……
(六)Flutter学习进阶
1、Flutter跨平台开发概述
2、Windows中Flutter开发环境搭建
3、编写你的第一个Flutter APP
4、Flutter Dart语言系统入门
……
(七)微信小程序开发
1、小程序概述及入门
2、小程序UI开发
3、API操作
4、购物商场项目实战
……
(八)kotlin从入门到精通
1、准备开始
2、基础
3、类和对象
4、函数和lambda表达式
5、其他
……
好啦,这份资料就给大家介绍到这了,有需要详细文档的小伙伴,可以微信扫下方二维码领取哈~