您的位置:首页 > 编程语言 > Java开发

rxjava(二)Single与Subject

2016-07-19 18:08 627 查看


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

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  java rxjava