Single
Single只发射一个值,或者一个error,而不是发射一系列的值。
订阅Single只需要两个方法:
· onSuccess - Single发射单个的值到这个方法
· onError - 如果无法发射需要的值,Single发射一个Throwable对象到这个方法
Single只会调用这两个方法中的一个,而且只会调用一次,调用了任何一个方法之后,订阅关系终止。
参考文档http://reactivex.io/documentation/single.html
Single<String> single = Single.just("hello");
BlockingSingle<String> blockingSingle = BlockingSingle.from(single);
System.out.println(blockingSingle.value());
打印
hello
Subject
Subject 可以充当Observer和Observable。因此它可以转发它收到的数据,也可以发新的数据。Subjecttugi一共有四种类型
AsyncSubject
AsyncSubject 发送最后一个值。它会把这最后一个值发射给任何后续的观察者。
如果发生了错误,只是简单的向前传递这个错误通知
AsyncSubject<String> subject = AsyncSubject.create();
Observer ob=new Observer(){
@Override
public void onCompleted() {
System.out.println("onCompleted");
}
@Override
public void onError(Throwable e) {
System.out.println("Throwable");
}
@Override
public void onNext(Object o) {
System.out.println("onNext"+o);
}
};
subject.onNext("one");
subject.onNext("two");
subject.onNext("three");
subject.onCompleted();//注释掉 就不会回调相关函数 没有任何打印
subject.subscribe(ob);
打印
onNextthree
onCompleted
BehaviorSubject
当观察者订阅时,开始发送最近的数据(如果此时还没有收到数据,它会发射一个默认值),然后继续发射其它数据。
如果发生错误就会终止,BehaviorSubject将不会发送任何数据,只是简单的向前传递这个错误通知。
BehaviorSubject<String> subject = BehaviorSubject.create("zero");
Observer ob=new Observer(){
@Override
public void onCompleted() {
System.out.println("onCompleted");
}
@Override
public void onError(Throwable e) {
System.out.println("Throwable");
}
@Override
public void onNext(Object o) {
System.out.println("onNext"+o);
}
};
subject.subscribe(ob);//onNextzero onNextone onNexttwo onNextthree
subject.onNext("one");
subject.onNext("two");
// subject.onError(new Throwable());
subject.onNext("three");
subject.subscribe(ob);//onNextthree
参考
http://reactivex.io/documentation/operators/defer.html
本文例子https://github.com/springsmile/rxjavademo