//RxJava2
implementation 'io.reactivex.rxjava2:rxjava:2.0.2'
implementation 'io.reactivex.rxjava2:rxandroid:2.0.2'
被观察者使用以下方法创建对象
泛型的数据类型根据需要传递的数据类型自己选择
Observable.create( ObservableOnSubscribe )
Observable.create(new ObservableOnSubscribe() {
@Override
public void subscribe(ObservableEmitter emitter) throws Exception {
emitter.onNext(1);
emitter.onNext(2);
emitter.onNext(3);
}
});
subcribe方法的调用,是在有订阅时才会调用,当订阅( 被观察者对象调用subcribe() 方法 observable.subcribe(简化订阅 or 观察者对象observer ) )后,会开始调用此处的subscribe方法,在 观察者 的 onSubcribe之后运行
也就是,当订阅完成时,此处代码的顺序会是
观察者 的 onSubcribe
被观察者的 subcribe
当发射器 noNext 后
会先调用doOnNext (当观察者有调用并实现doOnNext时
然后调用map(当观察者有调用并实现map时, 该方法作用是在数据到达观察者处前修改数据或数据类型并返回数据
最后数据到达观察者的 onNext 方法,在此处对UI进行更新
emitter为发射器对象,可通过发射器对象调用onNext方法来传递数据
emitter有以下几个方法
onNext 传递数据
onError 抛出错误,当抛出错误时,还在事件消息队列中的将不做处理。只能抛出一次错误!!
onComplete 当前事件已完成,还在事件消息队列中的将不做处理
tryOnError 尝试抛出错误
在观察者中,有相对应的方法来响应发射器发出的事件信号
在简化的订阅中,有 accept 方法来对发射器的 onNext 方法做出响应
观察者的创建
Observer observer = new Observer() {
@Override
public void onSubscribe(Disposable d) {
}
@Override
public void onNext(Integer integer) {
Log.i("onNext", String.valueOf(integer));
}
@Override
public void onError(Throwable e) {
}
@Override
public void onComplete() {
}
};
onSubscribe 是 在订阅绑定完成时 会调用的方法
onComplete 是 在事件消息队列完成任务时 会调用的方法
发射器无调用时,并不触发该方法
onNext 当发射器调用onNext方法传递数据后,观察者接收数据,并调用方法
onError 当发射器调用onError发出错误消息时,观察者接收异常信息,并调用方法
订阅的操作,触发观察者 onSubscribe 方法被观察者 subscribe 方法
observable.subscribe(observer);
Observable.create(new ObservableOnSubscribe() {
@Override
public void subscribe(ObservableEmitter emitter) throws Exception {
Log.i("subscribe", "subscribe");
emitter.onNext(1);
emitter.onNext(2);
emitter.onNext(3);
}
}).subscribe(new Observer() {
@Override
public void onSubscribe(Disposable d) {
Log.i("onSubscribe", "onSubscribe");
}
@Override
public void onNext(Integer integer) {
Log.i("onNext", String.valueOf(integer));
}
@Override
public void onError(Throwable e) {
}
@Override
public void onComplete() {
}
});
Consumer 用于接收单个值,并进行处理
Function 用于变换对象,例如 在map中,将一个数据进行处理,并返回其他类型的数据
observable.map(new Function() {
@Override
public String apply(Integer integer) throws Exception {
Log.i("map", String.valueOf(integer * 2));
return integer + "--String";
}
});
BiConsumer 接收两个值,并进行处理
Predicate 用于判断
Schedulers.io() 代表io操作的线程, 通常用于网络,读写文件等io密集型的操作;
Schedulers.computation() 代表CPU计算密集型的操作, 例如需要大量计算的操作;
Schedulers.newThread() 代表一个常规的新线程;
AndroidSchedulers.mainThread() 代表Android的主线程