注:在使用RxJava 2
操作符前,记得在项目的Gradle
中添加依赖:
compile 'io.reactivex.rxjava2:rxandroid:2.0.1' compile 'io.reactivex.rxjava2:rxjava:2.0.7'
1.create
private void create() { Observable.create(new ObservableOnSubscribe<Integer>() { @Override public void subscribe(ObservableEmitter<Integer> e) throws Exception { e.onNext(1); e.onNext(2); e.onNext(3); e.onComplete(); } }).subscribe(new Observer<Integer>() { @Override public void onSubscribe(Disposable d) { LogUtils.syso("++++++onSubscribe++++++++++"); } @Override public void onNext(Integer integer) { LogUtils.syso("++++++onNext++++++++++"+integer); } @Override public void onError(Throwable e) { LogUtils.syso("++++++onError++++++++++"+e.getMessage()); } @Override public void onComplete() { LogUtils.syso("++++++onComplete++++++++++"); } });
2.just
private void just() { Observable.just(1,2,3) .subscribe(new Consumer<Integer>() { @Override public void accept(Integer integer) throws Exception { LogUtils.syso("+++just+++accept++++++++++"+integer); } }, new Consumer<Throwable>() { @Override public void accept(Throwable throwable) throws Exception { LogUtils.syso("+++just+++throwable++++++++++"+throwable.getMessage()); } }); }
应用场景
快速创建 被观察者对象(Observable
) & 发送10个以下事件
3.fromArray
Integer[] items={0,1,2,3,4}; Observable.fromArray(items) .subscribe(new Consumer<Integer>() { @Override public void accept(Integer integer) throws Exception { LogUtils.syso("====accept==="+integer.toString()); } }, new Consumer<Throwable>() { @Override public void accept(Throwable throwable) throws Exception { LogUtils.syso("===throwable===="+throwable.getMessage()); } });
应用场景
- 快速创建 被观察者对象(
Observable
) & 发送10个以上事件(数组形式) - 数组元素遍历
fromIterable
private void fromIterable() { List<Student> mStudents=new ArrayList<>(); Student student; for (int i = 0; i < 3; i++) { student=new Student(); student.setSubject("测试"+i); mStudents.add(student); } Observable.fromIterable(mStudents) .subscribe(new Consumer<Student>() { @Override public void accept(Student student) throws Exception { LogUtils.syso("=====accept===="+student.getSubject()); } }, new Consumer<Throwable>() { @Override public void accept(Throwable throwable) throws Exception { LogUtils.syso("=====throwable===="+throwable.getMessage()); } }); }
应用场景
- 快速创建 被观察者对象(
Observable
) & 发送10个以上事件(数组形式) - 数组元素遍历
empty
/** * 该方法创建的被观察者对象发送事件的特点:仅发送Complete事件,直接通知完成 * */ private void empty() { Observable.empty() .subscribe(new Observer<Object>() { @Override public void onSubscribe(Disposable d) { LogUtils.syso("=========onSubscribe========="); } @Override public void onNext(Object o) { LogUtils.syso("=========onNext========="); } @Override public void onError(Throwable e) { LogUtils.syso("=========onError========="); } @Override public void onComplete() { LogUtils.syso("=========onComplete========="); } }); }
error
/** * 该方法创建的被观察者对象发送事件的特点:仅发送Error事件,直接通知异常 * */ private void error() { Observable.error(new RuntimeException()) .subscribe(new Observer<Object>() { @Override public void onSubscribe(Disposable d) { LogUtils.syso("=========onSubscribe========="); } @Override public void onNext(Object o) { LogUtils.syso("=========onNext========="); } @Override public void onError(Throwable e) { LogUtils.syso("=========onError========="); } @Override public void onComplete() { LogUtils.syso("=========onComplete========="); } }); }
never
/** * 该方法创建的被观察者对象发送事件的特点:不发送任何事件 * */ private void never() { Observable.never() .subscribe(new Observer<Object>() { @Override public void onSubscribe(Disposable d) { LogUtils.syso("=========onSubscribe========="); } @Override public void onNext(Object o) { LogUtils.syso("=========onNext========="); } @Override public void onError(Throwable e) { LogUtils.syso("=========onError========="); } @Override public void onComplete() { LogUtils.syso("=========onComplete========="); } }); }
defer
直到有观察者(Observer
)订阅时,才动态创建被观察者对象(Observable
) and 发送事件
private void defer() { i=1; Observable<Integer> observable = Observable.defer(new Callable<ObservableSource<? extends Integer>>() { @Override public ObservableSource<? extends Integer> call() throws Exception { return Observable.just(i); } }); i=15; observable. subscribe(new Consumer<Integer>() { @Override public void accept(Integer integer) throws Exception { LogUtils.syso("====accept======"+integer); } }); }
应用场景
动态创建被观察者对象(Observable
) & 获取最新的Observable
对象数据
timer
// 延迟指定时间后,发送1个数值0(Long类型) private void timer() { Observable.timer(5, TimeUnit.SECONDS) .subscribe(new Consumer<Long>() { @Override public void accept(Long aLong) throws Exception { LogUtils.syso("================"+aLong); } }); }应用场景
比如延时之后跳转页面
interval
// 5s后每隔1s发送一个long(0开始递增 每次增加1) private void interval() { Observable.interval(5,1,TimeUnit.SECONDS) .subscribe(new Consumer<Long>() { @Override public void accept(Long aLong) throws Exception { LogUtils.syso("====accept====="+aLong); } }); }
- 发送事件的特点:每隔指定时间 就发送 事件
- 发送的事件序列 = 从0开始、无限递增1的的整数序列
intervalRange
// 3s后每隔1s发送一个long(2开始递增 增加5个数) private void intervalRange() { Observable.intervalRange(2,5,3,1,TimeUnit.SECONDS) .subscribe(new Consumer<Long>() { @Override public void accept(Long aLong) throws Exception { LogUtils.syso("====accept====="+aLong); } }); }
- 发送事件的特点:每隔指定时间 就发送 事件,可指定发送的数据的数量
range
- 发送事件的特点:连续发送 1个事件序列,可指定范围
intervalRange()
,但区别在于:无延迟发送事件
// 每次发送一个long(2开始递增 增加5个数) private void range() { Observable.range(2,5) .subscribe(new Consumer<Integer>() { @Override public void accept(Integer integer) throws Exception { LogUtils.syso("=====accept===="+integer); } }); }
rangeLong
private void rangeLong() { Observable.rangeLong(2,3) .subscribe(new Consumer<Long>() { @Override public void accept(Long aLong) throws Exception { LogUtils.syso("====rangeLong====="+aLong); } }); }
类似于range()
,区别在于该方法支持数据类型 = Long