rxjava(二)Single与Subject

本文详细介绍了RxJava中Single的使用,它仅发射一个值或错误。Single的订阅包含onSuccess和onError两个方法,且只会调用其中之一。此外,文章还探讨了Subject的种类,如AsyncSubject和BehaviorSubject,它们可以作为Observer和Observable,转发接收的数据并能发送新数据。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值