通过具体的示例,系统学习并记录每个操作符的使用方法~
1. Create ⭐️
创建一个Observable,在Create操作符的闭包中,通过发射器直接调用观察者的onNext、onComplete等回调方法,来完成事件的发送。
示例:
Observable.create(object : ObservableOnSubscribe<Int> {
override fun subscribe(emitter: ObservableEmitter<Int>) {
emitter.onNext(1)
emitter.onNext(2)
emitter.onNext(3)
emitter.onComplete()
}
}).subscribe(object : Observer<Int> {
override fun onSubscribe(d: Disposable) {
Log.e(TAG, "---------onSubscribe---------")
}
override fun onNext(t: Int) {
Log.e(TAG, "---------onNext--------${t}-")
}
override fun onError(e: Throwable) {
Log.e(TAG, "---------onError---------")
}
override fun onComplete() {
Log.e(TAG, "---------onComplete---------")
}
})
输出结果:
E/CreateOperator: ---------onSubscribe---------
E/CreateOperator: ---------onNext--------1-
E/CreateOperator: ---------onNext--------2-
E/CreateOperator: ---------onNext--------3-
E/CreateOperator: ---------onComplete---------
2. Defer
Defer操作符提供一个Observable工厂函数,当有观察者订阅它的时候,它会为每个观察者生成一个Observable供观察者订阅。它保证了未被订阅时不会创建Observable,而订阅时Observable包含的数据一定是最新的。
示例:
//定义一个数据源
val source = mutableListOf<Int>(1,2,3)
val defer = Observable.defer { Observable.fromIterable(source); }
defer.subscribe(object : Observer<Any> {
override fun onSubscribe(d: Disposable) {
Log.e(TAG, "-----defer1----onSubscribe---------")
}
override fun onNext(t: Any) {
Log.e(TAG, "----defer1-----onNext--------${t}-")
}
override fun onError(e: Throwable) {
Log.e(TAG, "----defer1-----onError---------")
}
override fun onComplete() {
Log.e(TAG, "-----defer1----onComplete---------")
//往数据源中添加一个数据
source.add(100)
}
})
defer.subscribe(object : Observer<Any> {
override fun onSubscribe(d: Disposable) {
Log.e(TAG, "-----defer2----onSubscribe---------")
}
override fun onNext(t: Any) {
Log.e(TAG, "----defer2-----onNext--------${t}-")
}
override fun onError(e: Throwable) {
Log.e(TAG, "----defer2-----onError---------")
}
override fun onComplete() {
Log.e(TAG, "-----defer2----onComplete---------")
}
})
输出结果:
E/CreateOperator: -----defer1----onSubscribe---------
E/CreateOperator: ----defer1-----onNext--------1-
E/CreateOperator: ----defer1-----onNext--------2-
E/CreateOperator: ----defer1-----onNext--------3-
E/CreateOperator: -----defer1----onComplete---------
E/CreateOperator: -----defer2----onSubscribe---------
E/CreateOperator: ----defer2-----onNext--------1-
E/CreateOperator: ----defer2-----onNext--------2-
E/CreateOperator: ----defer2-----onNext--------3-
E/CreateOperator: ----defer2-----onNext--------100-
E/CreateOperator: -----defer2----onComplete---------
3. Empty
创建一个Observable,它不发出任何项,但正常终止。
示例:
Observable.empty<Any>()
.doFinally {
Log.e(TAG, "---------doFinally---------")
}
.subscribe(object : Observer<Any> {
override fun onSubscribe(d: Disposable) {
Log.e(TAG, "---------onSubscribe---------")
}
override fun onNext(t: Any) {
Log.e(TAG, "---------onNext--------${t}-")
}
override fun onError(e: Throwable) {
Log.e(TAG, "---------onError---------")
}
override fun onComplete() {
Log.e(TAG, "---------onComplete---------")
}
})
输出结果:
E/CreateOperator: ---------onSubscribe---------
E/CreateOperator: ---------onComplete---------
E/CreateOperator: ---------doFinally---------
4. Never
创建一个Observable,它不发出任何项,也不终止。
示例:
Observable.never<Any>()
.doFinally {
Log.e(TAG, "---------doFinally---------")
}
.subscribe(object : Observer<Any> {
override fun onSubscribe(d: Disposable) {
Log.e(TAG, "---------onSubscribe---------")
}
override fun onNext(t: Any) {
Log.e(TAG, "---------onNext--------${t}-")
}
override fun onError(e: Throwable) {
Log.e(TAG, "---------onError---------")
}
override fun onComplete() {
Log.e(TAG, "---------onComplete---------")
}
})
输出结果:
E/CreateOperator: ---------onSubscribe---------
5.Throw
创建一个Observable,它不发出任何项,但以错误终止。
示例:
Observable.error<Throwable>(Throwable())
.doFinally {
Log.e(TAG, "---------doFinally---------")
}
.subscribe(object : Observer<Any> {
override fun onSubscribe(d: Disposable) {
Log.e(TAG, "---------onSubscribe---------")
}
override fun onNext(t: Any) {
Log.e(TAG, "---------onNext--------${t}-")
}
override fun onError(e: Throwable) {
Log.e(TAG, "---------onError---------")
}
override fun onComplete() {
Log.e(TAG, "---------onComplete---------")
}
})
输出结果
E/CreateOperator: ---------onSubscribe---------
E/CreateOperator: ---------onError---------
E/CreateOperator: ---------doFinally---------
6.From ⭐️
将各种对象和数据类型转换为Observable,并依次发送数据源数据。根据不通的数据源调用不同的操作符,即可创建出对应的观察者,主要包括:fromArray、fromCallable、fromFuture、fromIterable、fromPublisher等。
示例(fromArray):
//fromArray
Observable.fromArray(1, "2a", 3)
.subscribe(object : Observer<Any> {
override fun onSubscribe(d: Disposable) {
Log.e(TAG, "---------onSubscribe---------")
}
override fun onNext(t: Any) {
Log.e(TAG, "---------onNext--------${t}-")
}
override fun onError(e: Throwable) {
Log.e(TAG, "---------onError---------")
}
override fun onComplete() {
Log.e(TAG, "---------onComplete---------")
}
})
输出结果:
E/CreateOperator: ---------onSubscribe---------
E/CreateOperator: ---------onNext--------1-
E/CreateOperator: ---------onNext--------2a-
E/CreateOperator: ---------onNext--------3-
E/CreateOperator: ---------onComplete---------
示例(fromIterable):
//fromIterable
Observable.fromIterable(arrayListOf(1,"2a",3))
.subscribe(object : Observer<Any> {
override fun onSubscribe(d: Disposable) {
Log.e(TAG, "---------onSubscribe---------")
}
override fun onNext(t: Any) {
Log.e(TAG, "---------onNext--------${t}-")
}
override fun onError(e: Throwable) {
Log.e(TAG, "---------onError---------")
}
override fun onComplete() {
Log.e(TAG, "---------onComplete---------")
}
})
输出结果:
E/CreateOperator: ---------onSubscribe---------
E/CreateOperator: ---------onNext--------1-
E/CreateOperator: ---------onNext--------2a-
E/CreateOperator: ---------onNext--------3-
E/CreateOperator: ---------onComplete---------
7.Interval ⭐️
创建一个Observable,它根据给定的时间间隔,发出一个无限序列的递增整数。简单来说就是连续、定时发送。
示例(interval):
//间隔1秒,发送
Observable.interval(1, TimeUnit.SECONDS)
.take(3)//这里限制发送三次,不限制会一直发送
.subscribe(object : Observer<Any> {
override fun onSubscribe(d: Disposable) {
Log.e(TAG, "---------onSubscribe---------")
}
override fun onNext(t: Any) {
Log.e(TAG, "---------onNext--------${t}----")
}
override fun onError(e: Throwable) {
Log.e(TAG, "---------onError---------")
}
override fun onComplete() {
Log.e(TAG, "---------onComplete---------")
}
})
输出结果(这里可以注意日志输出的时间间隔):
2022-10-11 20:53:32.143 E/CreateOperator: ---------onSubscribe---------
2022-10-11 20:53:33.144 E/CreateOperator: ---------onNext--------0----
2022-10-11 20:53:34.144 E/CreateOperator: ---------onNext--------1----
2022-10-11 20:53:35.144 E/CreateOperator: ---------onNext--------2----
2022-10-11 20:53:35.144 E/CreateOperator: ---------onComplete---------
示例(intervalRange):
//start开始累计,count累计多个个数量,
//initDelay开始等待时间,period 每隔多久执行 TimeUnit 时间单位
Observable.intervalRange(6, 5, 0, 1, TimeUnit.SECONDS)
.subscribe(object : Observer<Any> {
override fun onSubscribe(d: Disposable) {
Log.e(TAG, "---------onSubscribe---------")
}
override fun onNext(t: Any) {
Log.e(TAG, "---------onNext--------${t}-")
}
override fun onError(e: Throwable) {
Log.e(TAG, "---------onError---------")
}
override fun onComplete() {
Log.e(TAG, "---------onComplete---------")
}
})
输出结果:
2022-10-11 20:58:53.059 E/CreateOperator: ---------onSubscribe---------
2022-10-11 20:58:53.060 E/CreateOperator: ---------onNext--------6-
2022-10-11 20:58:54.060 E/CreateOperator: ---------onNext--------7-
2022-10-11 20:58:55.060 E/CreateOperator: ---------onNext--------8-
2022-10-11 20:58:56.060 E/CreateOperator: ---------onNext--------9-
2022-10-11 20:58:57.060 E/CreateOperator: ---------onNext--------10-
2022-10-11 20:58:57.060 E/CreateOperator: ---------onComplete---------
8.Just ⭐️
将一个或一组对象转换为发射这些对象的Observable。如果您将null传递给Just,它还是会返回一个Observable,并将null作为一个项发出。
示例:
Observable.just(1, "2", 3)
.subscribe(object : Observer<Any> {
override fun onSubscribe(d: Disposable) {
Log.e(TAG, "---------onSubscribe---------")
}
override fun onNext(t: Any) {
Log.e(TAG, "---------onNext--------${t}-")
}
override fun onError(e: Throwable) {
Log.e(TAG, "---------onError---------")
}
override fun onComplete() {
Log.e(TAG, "---------onComplete---------")
}
})
输出结果:
E/CreateOperator: ---------onSubscribe---------
E/CreateOperator: ---------onNext--------1-
E/CreateOperator: ---------onNext--------2-
E/CreateOperator: ---------onNext--------3-
E/CreateOperator: ---------onComplete---------
9.Range
创建一个Observable按顺序发出一系列连续整数,可以指定范围(起始位置和发送多少个)。
示例:
//从10开始,发送5个数
Observable.range(10, 5)
.subscribe(object : Observer<Int> {
override fun onSubscribe(d: Disposable) {
Log.e(TAG, "---------onSubscribe---------")
}
override fun onNext(t: Int) {
Log.e(TAG, "---------onNext--------${t}-")
}
override fun onError(e: Throwable) {
Log.e(TAG, "---------onError---------")
}
override fun onComplete() {
Log.e(TAG, "---------onComplete---------")
}
})
输出结果:
E/CreateOperator: ---------onSubscribe---------
E/CreateOperator: ---------onNext--------10-
E/CreateOperator: ---------onNext--------11-
E/CreateOperator: ---------onNext--------12-
E/CreateOperator: ---------onNext--------13-
E/CreateOperator: ---------onNext--------14-
E/CreateOperator: ---------onComplete---------
10.Repeat
根据指定的重复次数,重复发送项目。
示例:
Observable.just(1, 2, 3)
.repeat(2)
.subscribe(object : Observer<Int> {
override fun onSubscribe(d: Disposable) {
Log.e(TAG, "---------onSubscribe---------")
}
override fun onNext(t: Int) {
Log.e(TAG, "---------onNext--------${t}-")
}
override fun onError(e: Throwable) {
Log.e(TAG, "---------onError---------")
}
override fun onComplete() {
Log.e(TAG, "---------onComplete---------")
}
})
输出结果:
E/CreateOperator: ---------onSubscribe---------
E/CreateOperator: ---------onNext--------1-
E/CreateOperator: ---------onNext--------2-
E/CreateOperator: ---------onNext--------3-
E/CreateOperator: ---------onNext--------1-
E/CreateOperator: ---------onNext--------2-E/CreateOperator: ---------onNext--------3-
E/CreateOperator: ---------onComplete---------
11.Timer ⭐️
创建一个Observable,它在指定的时间跨度后发出一个特定项目。
示例:
Observable.timer(3, TimeUnit.SECONDS)
.subscribe(object : Observer<Any> {
override fun onSubscribe(d: Disposable) {
Log.e(TAG, "---------onSubscribe---------")
}
override fun onNext(t: Any) {
Log.e(TAG, "---------onNext--------${t}-")
}
override fun onError(e: Throwable) {
Log.e(TAG, "---------onError---------")
}
override fun onComplete() {
Log.e(TAG, "---------onComplete---------")
}
})
输出结果:
2022-10-11 21:11:50.219 E/CreateOperator: ---------onSubscribe---------
2022-10-11 21:11:53.220 E/CreateOperator: ---------onNext--------0-
2022-10-11 21:11:53.221 E/CreateOperator: ---------onComplete---------
官方链接:
ReactiveX - Operatorshttps://reactivex.io/documentation/operators.html