RxJava是开源中实现的ReactiveX在Java。两个主要的类是观察者类和订阅类。在RxJava中,观察者是一个类,它发出一连串的数据或事件,这个观察者标准的流程是可以发出一个或者多个并且成功完成或者伴随着错误,一旦一个观察者完成某个项目,它将调用Subscriber.onCompleted()方法或者错误的话,那么观察者就会调用Subscriber.onError()方法,现在我们知道关于观察者和订阅者这2个类足够多了,我们将创建一个订阅者在观察者上面.
Observable integerObservable = Observable.create(new Observable.OnSubscribe() { @Override public void call(Subscriber subscriber) { subscriber.onNext(1); subscriber.onNext(2); subscriber.onNext(3); subscriber.onCompleted(); } });
Subscriber integerSubscriber = new Subscriber() { @Override public void onCompleted() { System.out.println("Complete!"); } @Override public void onError(Throwable e) { } @Override public void onNext(Integer value) { System.out.println("onNext: " + value); } };
integerObservable.subscribe(integerSubscriber); // Outputs: // onNext: 1 // onNext: 2 // onNext: 3 // Complete!
Observable.just(1, 2, 3, 4, 5, 6) // add more numbers .filter(new Func1() { @Override public Boolean call(Integer value) { return value % 2 == 1; } }) .subscribe(new Subscriber() { @Override public void onCompleted() { System.out.println("Complete!"); } @Override public void onError(Throwable e) { } @Override public void onNext(Integer value) { System.out.println("onNext: " + value); } }); // Outputs: // onNext: 1 // onNext: 3 // onNext: 5 // Complete!
下面是一个完整的使用方式:
Subscription subscription = Single.create(new Single.OnSubscribe() { @Override public void call(SingleSubscriber singleSubscriber) { String value = longRunningOperation(); singleSubscriber.onSuccess(value); } }) .subscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread()) .subscribe(new Action1() { @Override public void call(String value) { // onSuccess Snackbar.make(rootView, value, Snackbar.LENGTH_LONG).show(); } }, new Action1() { @Override public void call(Throwable throwable) { // handle onError } });