rxjava(二)Single与Subject

来源:互联网 发布:java 线程池 编辑:程序博客网 时间:2024/05/22 12:01

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可以充当ObserverObservable。因此它可以转发它收到的数据,也可以发新的数据。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

0 0
原创粉丝点击