Rxjava2.0(一) 创建操作符

注:在使用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());
            }
  });

应用场景

  1. 快速创建 被观察者对象(Observable) & 发送10个以上事件(数组形式)
  2. 数组元素遍历

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());
                }
            });
}

应用场景

  1. 快速创建 被观察者对象(Observable) & 发送10个以上事件(数组形式)
  2. 数组元素遍历

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个数值0Long类型)
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);
              }
          });
}

  1. 发送事件的特点:每隔指定时间 就发送 事件
  2. 发送的事件序列 = 从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);
              }
          });
}

  1. 发送事件的特点:每隔指定时间 就发送 事件,可指定发送的数据的数量


range

  1. 发送事件的特点:连续发送 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

猜你喜欢

转载自blog.csdn.net/oneblue123/article/details/80537899