RxJava2.x详解系列博客
转载请标明出处:
https://blog.csdn.net/u011035026/article/details/85307622;
1、RxJava简介?
- 简洁,支持链式调用
- 扩展的观察者模式
- 线程之间切换非常方便
- 被观察者订阅观察者
2、RxJava2.x总纲
3、RxJava1.x和RxJava2.x的区别?
4、RxJava的使用三步骤
- 创建Observable(被观察者)
- 创建Observer(观察者)
- 使用subscribe()进行订阅,这里要注意是被观察者订阅观察者
5、subscribe的重载方法
- subscribe(onNext)
- subscribe(onNext,onError)
- subscribe(onNext,onError,onComplete)
- subscribe(onNext,onError,onComplete,obSubscribe)
注意:
(1)onNext、onError、onSubscribe都是对应一个Consumer对象,而onComplete对应一个Action对象。
(2)Consumer和Action的区别在于Consumer带有一个单一参数类型,Action是一个无参数类型。
(3)执行顺序优先级,onSubscribe优先执行,成功则执行onNext,然后onComplete,反之失败则执行onError。
6、RxJava2.x中的5种观察者模式
- Observable=>能够发射0或者n个数据,并以成功或者错事件终止。
- Flowable=>能够发射0或者n个数据,并以成功或者错误事件终止,支持背压,可以控制数据源的发射速度。
- Single=>只发射单个数据或者错误事件
- Completable=>从来不发射数据,只处理onComplete和onError事件。
- Maybe=>能够发射0或者1个数据,要么成功,要么失败。
(1)那么接下来咱们先看看第一种观察者模式写法Observable.subscribe(Observer)
### 第一种写法
### 注意这里的onNext()方法是Rxjava2.x里面的一种操作符,通俗的理解就是一个事件触发机制,
### 它会把"Hello Rxjava2.x"这个String类型的字符串数据,发送到成功的回调方法中去让其响应。
### 同理onError()和onComplete()方法同上理解,只是触发的回调不同而已。
Observable.create(new ObservableOnSubscribe<String>() {
@Override
public void subscribe(ObservableEmitter<String> emitter) throws Exception {
emitter.onNext("Hello Rxjava2.x");
//emitter.onError(new Throwable("Hello Rxjava2.x Error"));
emitter.onComplete();
}
}).subscribe(new Observer<String>() {
@Override
public void onSubscribe(Disposable d) {
//订阅的回调,可以用来取消当前订阅
System.out.println("subscribe");
}
@Override
public void onNext(String s) {
//成功的回调
System.out.println(s);
}
@Override
public void onError(Throwable e) {
//失败的回调
System.out.println(e.getMessage());
}
@Override
public void onComplete() {
//完成的回调
System.out.println("onComplete");
}
});
### 第二种写法
Observable.create(new ObservableOnSubscribe<String>() {
@Override
public void subscribe(ObservableEmitter<String> emitter) throws Exception {
emitter.onNext("Hello Rxjava2.x");
//emitter.onError(new Throwable("Hello Rxjava2.x Error"));
emitter.onComplete();
}
}).subscribe(new Consumer<String>() {
@Override
public void accept(String s) throws Exception {
//成功的回调
System.out.println(s);
}
}, new Consumer<Throwable>() {
@Override
public void accept(Throwable e) throws Exception {
//失败的回调
System.out.println(e.getMessage());
}
}, new Action() {
@Override
public void run() throws Exception {
//完成的回调
System.out.println("onComplete");
}
}, new Consumer<Disposable>() {
@Override
public void accept(Disposable disposable) throws Exception {
//订阅的回调,可以用来取消当前订阅
System.out.println("subscribe");
}
});
### 对应的Kotlin写法
Observable.create(ObservableOnSubscribe<String> {
it.onNext("Hello Rxjava2.x")
//it.onError(new Throwable("Hello Rxjava2.x Error"));
it.onComplete()
}).subscribe(object : Observer<String> {
override fun onSubscribe(d: Disposable) {
//订阅的回调,可以用来取消当前订阅
println("subscribe")
}
override fun onNext(s: String) {
//成功的回调
println(s)
}
override fun onError(e: Throwable) {
//失败的回调
print(e.message)
}
override fun onComplete() {
//完成的回调
println("onComplete")
}
})
Observable.create(ObservableOnSubscribe<String> {
it.onNext("Hello Rxjava2.x")
//it.onError(new Throwable("Hello Rxjava2.x Error"));
it.onComplete()
}).subscribe({
//成功的回调
println(it)
}, {
//失败的回调
println(it.message)
}, {
//完成的回调
println("onComplete")
}, {
//订阅的回调,可以用来取消当前订阅
println("subscribe")
})
(2)第二种观察者模式写法Flowable.subscribe(Subscriver)
### 第一种写法
Flowable.create(new FlowableOnSubscribe<String>() {
@Override
public void subscribe(FlowableEmitter<String> emitter) throws Exception {
emitter.onNext("Hello Rxjava2.x");
//emitter.onError(new Throwable("Hello Rxjava2.x Error"));
emitter.onComplete();
}
}, BackpressureStrategy.BUFFER).subscribe(new FlowableSubscriber<String>() {
@Override
public void onSubscribe(Subscription s) {
//订阅的回调,可以用来取消当前订阅
System.out.println("subscribe");
}
@Override
public void onNext(String s) {
//成功的回调
System.out.println(s);
}
@Override
public void onError(Throwable e) {
//失败的回调
System.out.println(e.getMessage());
}
@Override
public void onComplete() {
//完成的回调
System.out.println("onComplete");
}
});
### 第二种写法
Flowable.create(new FlowableOnSubscribe<String>() {
@Override
public void subscribe(FlowableEmitter<String> emitter) throws Exception {
emitter.onNext("Hello Rxjava2.x");
//emitter.onError(new Throwable("Hello Rxjava2.x Error"));
emitter.onComplete();
}
}, BackpressureStrategy.BUFFER).subscribe(new Consumer<String>() {
@Override
public void accept(String s) throws Exception {
//成功的回调
System.out.println(s);
}
}, new Consumer<Throwable>() {
@Override
public void accept(Throwable e) throws Exception {
//失败的回调
System.out.println(e.getMessage());
}
}, new Action() {
@Override
public void run() throws Exception {
//完成的回调
System.out.println("onComplete");
}
}, new Consumer<Subscription>() {
@Override
public void accept(Subscription subscription) throws Exception {
//订阅的回调,可以用来取消当前订阅
System.out.println("subscribe");
}
});
### 对应的Kotlin写法
Flowable.create(FlowableOnSubscribe<String> {
it.onNext("Hello Rxjava2.x")
//it.onError(new Throwable("Hello Rxjava2.x Error"));
it.onComplete()
}, BackpressureStrategy.BUFFER).subscribe(object : FlowableSubscriber<String> {
override fun onSubscribe(s: Subscription) {
//订阅的回调,可以用来取消当前订阅
println("subscribe")
}
override fun onNext(s: String) {
//成功的回调
println(s)
}
override fun onError(e: Throwable) {
//失败的回调
println(e.message)
}
override fun onComplete() {
//完成的回调
println("onComplete")
}
})
Flowable.create(FlowableOnSubscribe<String> {
it.onNext("Hello Rxjava2.x")
//it.onError(new Throwable("Hello Rxjava2.x Error"));
it.onComplete()
}, BackpressureStrategy.BUFFER).subscribe({ s ->
//成功的回调
println(s)
}, {
//失败的回调
println(it.message)
}, {
//完成的回调
println("onComplete")
}, {
//订阅的回调,可以用来取消当前订阅
println("subscribe")
})
(3)第三种观察者模式写法Single.subscribe(SingleObserver)
### 第一种写法
Single.create(new SingleOnSubscribe<String>() {
@Override
public void subscribe(SingleEmitter<String> emitter) throws Exception {
emitter.onSuccess("Hello Rxjava2.x");
//emitter.onError(new Throwable("Hello Rxjava2.x Error"));
}
}).subscribe(new SingleObserver<String>() {
@Override
public void onSubscribe(Disposable d) {
//订阅的回调,可以用来取消当前订阅
System.out.println("subscribe");
}
@Override
public void onSuccess(String s) {
//成功的回调
System.out.println(s);
}
@Override
public void onError(Throwable e) {
//失败的回调
System.out.println(e.getMessage());
}
});
### 第二种写法
Single.create(new SingleOnSubscribe<String>() {
@Override
public void subscribe(SingleEmitter<String> emitter) throws Exception {
emitter.onSuccess("Hello Rxjava2.x");
//emitter.onError(new Throwable("Hello Rxjava2.x Error"));
}
}).subscribe(new Consumer<String>() {
@Override
public void accept(String s) throws Exception {
//成功的回调
System.out.println(s);
}
}, new Consumer<Throwable>() {
@Override
public void accept(Throwable e) throws Exception {
//失败的回调
System.out.println(e.getMessage());
}
});
### 对应的Kotlin写法
Single.create(SingleOnSubscribe<String> {
it.onSuccess("Hello Rxjava2.x")
//it.onError(new Throwable("Hello Rxjava2.x Error"));
}).subscribe(object : SingleObserver<String> {
override fun onSubscribe(d: Disposable) {
//订阅的回调,可以用来取消当前订阅
println("subscribe")
}
override fun onSuccess(s: String) {
//成功的回调
println(s)
}
override fun onError(e: Throwable) {
//失败的回调
println(e.message)
}
})
Single.create(SingleOnSubscribe<String> {
it.onSuccess("Hello Rxjava2.x")
//it.onError(new Throwable("Hello Rxjava2.x Error"));
}).subscribe({
//成功的回调
println(it)
}, {
//失败的回调
println(it.message)
})
(4)第四种观察者模式写法Completable.subscribe(CompletebleObserver)
### 第一种写法
Completable.create(new CompletableOnSubscribe() {
@Override
public void subscribe(CompletableEmitter emitter) throws Exception {
//emitter.onError(new Throwable("Hello Rxjava2.x Error"));
emitter.onComplete();
}
}).subscribe(new CompletableObserver() {
@Override
public void onSubscribe(Disposable d) {
//订阅的回调,可以用来取消当前订阅
System.out.println("subscribe");
}
@Override
public void onComplete() {
//完成的回调
System.out.println("onComplete");
}
@Override
public void onError(Throwable e) {
//失败的回调
System.out.println(e.getMessage());
}
});
### 第二种写法
Completable.create(new CompletableOnSubscribe() {
@Override
public void subscribe(CompletableEmitter emitter) throws Exception {
//emitter.onError(new Throwable("Hello Rxjava2.x Error"));
emitter.onComplete();
}
}).subscribe(new Action() {
@Override
public void run() throws Exception {
//完成的回调
System.out.println("onComplete");
}
}, new Consumer<Throwable>() {
@Override
public void accept(Throwable e) throws Exception {
//失败的回调
System.out.println(e.getMessage());
}
});
### 对应的Kotlin写法
Completable.create {
//it.onError(new Throwable("Hello Rxjava2.x Error"));
it.onComplete()
}.subscribe(object : CompletableObserver {
override fun onSubscribe(d: Disposable) {
//订阅的回调,可以用来取消当前订阅
println("subscribe")
}
override fun onComplete() {
//完成的回调
println("onComplete")
}
override fun onError(e: Throwable) {
//失败的回调
println(e.message)
}
})
Completable.create {
//it.onError(new Throwable("Hello Rxjava2.x Error"));
it.onComplete()
}.subscribe({
//完成的回调
println("onComplete")
}, {
//失败的回调
println(it.message)
})
(5)第四种观察者模式写法Maybe.subscribe(MaybeObserver)
### 第一种写法
Maybe.create(new MaybeOnSubscribe<String>() {
@Override
public void subscribe(MaybeEmitter<String> emitter) throws Exception {
emitter.onSuccess("Hello Rxjava2.x");
//emitter.onError(new Throwable("Hello Rxjava2.x Error"));
emitter.onComplete();
}
}).subscribe(new MaybeObserver<String>() {
@Override
public void onSubscribe(Disposable d) {
//订阅的回调,可以用来取消当前订阅
System.out.println("subscribe");
}
@Override
public void onSuccess(String s) {
//成功的回调
System.out.println(s);
}
@Override
public void onError(Throwable e) {
//失败的回调
System.out.println(e.getMessage());
}
@Override
public void onComplete() {
//完成的回调
System.out.println("onComplete");
}
});
### 第二种写法
Maybe.create(new MaybeOnSubscribe<String>() {
@Override
public void subscribe(MaybeEmitter<String> emitter) throws Exception {
emitter.onSuccess("Hello Rxjava2.x");
//emitter.onError(new Throwable("Hello Rxjava2.x Error"));
emitter.onComplete();
}
}).subscribe(new Consumer<String>() {
@Override
public void accept(String s) throws Exception {
//成功的回调
System.out.println(s);
}
}, new Consumer<Throwable>() {
@Override
public void accept(Throwable e) throws Exception {
//失败的回调
System.out.println(e.getMessage());
}
}, new Action() {
@Override
public void run() throws Exception {
//完成的回调
System.out.println("onComplete");
}
});
### 对应的Kotlin写法
Maybe.create(MaybeOnSubscribe<String> {
it.onSuccess("Hello Rxjava2.x")
//it.onError(new Throwable("Hello Rxjava2.x Error"));
it.onComplete()
}).subscribe(object : MaybeObserver<String> {
override fun onSubscribe(d: Disposable) {
//订阅的回调,可以用来取消当前订阅
println("subscribe")
}
override fun onSuccess(s: String) {
//成功的回调
println(s)
}
override fun onError(e: Throwable) {
//失败的回调
println(e.message)
}
override fun onComplete() {
//完成的回调
println("onComplete")
}
})
Maybe.create(MaybeOnSubscribe<String> {
it.onSuccess("Hello Rxjava2.x")
//it.onError(new Throwable("Hello Rxjava2.x Error"));
it.onComplete()
}).subscribe({
//成功的回调
println(it)
}, {
//失败的回调
println(it.message)
}, {
//完成的回调
println("onComplete")
})