RxJava2.0的基本使用
本文主要讲述一下RxJava2.0版本的基本用法以及相应的注意事项,RxJava2.0版本的基本用法有3步:
- 创建被观察者(事件发送者)
//创建被观察者(事件发送者)
Observable<String> observable = Observable.create(new ObservableOnSubscribe<String>() {
@Override
public void subscribe(ObservableEmitter<String> emitter) throws Exception {
emitter.onNext("hello");
emitter.onNext("rxjava");
emitter.onComplete();
}
});
- 创建观察者(事件接收者)
//创建观察者(事件接收者)
Observer<String> observer = new Observer<String>() {
@Override
public void onSubscribe(Disposable disposable) {
mDisposable = disposable;
Log.e("znh", "onSubscribe...");
}
@Override
public void onNext(String value) {
Log.e("znh", "onNext..." + value);
}
@Override
public void onError(Throwable e) {
Log.e("znh", "onError..." + e.getMessage());
}
@Override
public void onComplete() {
Log.e("znh", "onComplete...");
}
};
- 事件发送者和事件接收者建立订阅关系
//建立订阅关系
observable.subscribe(observer);
实际使用时一般都是链式调用写法,使代码逻辑变的更简洁,方便操作符的使用:
//链式调用
Observable.create(new ObservableOnSubscribe<String>() {
@Override
public void subscribe(ObservableEmitter<String> emitter) throws Exception {
emitter.onNext("hello");
emitter.onNext("rxjava");
emitter.onComplete();
}
}).subscribe(new Observer<String>() {
@Override
public void onSubscribe(Disposable disposable) {
mDisposable = disposable;
Log.e("znh", "onSubscribe...");
}
@Override
public void onNext(String value) {
Log.e("znh", "onNext..." + value);
}
@Override
public void onError(Throwable e) {
Log.e("znh", "onError..." + e.getMessage());
}
@Override
public void onComplete() {
Log.e("znh", "onComplete...");
}
});
最终的打印结果如下:
07-09 22:09:15.079 22776-22776/com.znh.rxjavademo E/znh: onSubscribe...
07-09 22:09:15.080 22776-22776/com.znh.rxjavademo E/znh: onNext...hello
07-09 22:09:15.080 22776-22776/com.znh.rxjavademo E/znh: onNext...rxjava
07-09 22:09:15.080 22776-22776/com.znh.rxjavademo E/znh: onComplete...
RxJava2.0的注意事项
- onSubscribe方法中的参数Disposable是个非常重要的参数,如果想中途中断事件的处理,那么可以调用Disposable的dispose方法,调用该方法时事件接受者将不再接收事件(但是事件发送者仍继续发送事件),通常在Activity页面关闭时调用该方法中断未完成的操作。
- 事件发送者如果发送多次onComplete事件,那么从第二次开始就是无效的,也就是说无论发送多少onComplete事件,接收者都只会接收一次onComplete事件。
- 如果在onComplete之后发送onError事件或者多次发送onError事件,都会抛出异常,所以onError只能发送一次,并且不能在onComplete之后发送。