RX操作符之Observable的创建方式二(defer、range、interval、timer、Empty、Never、Throw)

一、defer

Defer操作符会一直等待直到有观察者订阅它,然后它使用Observable工厂方法生成一个Observable。它对每个观察者都这样做,因此尽管每个订阅者都以为自己订阅的是同一个Observable,事实上每个订阅者获取的是它们自己的单独的数据序列。


    String[]items = {"just1","just2","just3","just4","just5","just6"};

        Observable<String> myObservable = Observable.from(items);

        Subscriber<String> mySubscriber = new Subscriber<String>() {
            @Override
            public void onNext(String s) {
                System.out.println("onNext................."+s);
            }

            @Override
            public void onCompleted() {
                System.out.println("onCompleted.................");
            }

            @Override
            public void onError(Throwable e) {
                System.out.println("onError....................");
            }
        };

        Subscriber<String> mySubscriber1 = new Subscriber<String>() {
            @Override
            public void onNext(String s) {
                System.out.println("onNext................."+s);
            }

            @Override
            public void onCompleted() {
                System.out.println("onCompleted.................");
            }

            @Override
            public void onError(Throwable e) {
                System.out.println("onError....................");
            }
        };

        myObservable.subscribe(mySubscriber);
        myObservable.subscribe(mySubscriber1);
运行结果:


尽管打印的结果一样,但是它们不是取自同一个Observable的数据

二、Range

创建一个发射特定整数序列的Observable,接收两个参数,第一个参数是范围的起始值,第二个参数是范围的数据数目,即需要多产生多少个这样的值。如果你将第二个参数设为0,将导致Observable不发射任何数据(如果设置为负数,会抛异常)。range默认不在任何特定的调度器上执行。有一个变体可以通过可选参数指定Scheduler。

String[]items = {"just1","just2","just3","just4","just5","just6"};

        Observable<Integer> myObservable = Observable.range(5,10);


        Subscriber<Integer> mySubscriber = new Subscriber<Integer>() {
            @Override
            public void onNext(Integer s) {
                System.out.println("onNext................."+s);
            }

            @Override
            public void onCompleted() {
                System.out.println("onCompleted.................");
            }

            @Override
            public void onError(Throwable e) {
                System.out.println("onError....................");
            }
        };

        myObservable.subscribe(mySubscriber);

运行结果:


三、 Interval

Interval操作符返回一个Observable,它按固定的时间间隔发射一个无限递增的整数序列。RxJava将这个操作符实现为interval方法。它接受一个表示时间间隔的参数和一个表示时间单位的参数。结果递增且不断增加


Observable<Long> myObservable = Observable.interval(2,TimeUnit.SECONDS);


        Subscriber<Long> mySubscriber = new Subscriber<Long>() {
            @Override
            public void onNext(Long s) {
                System.out.println("onNext................."+s);
            }

            @Override
            public void onCompleted() {
                System.out.println("onCompleted.................");
            }

            @Override
            public void onError(Throwable e) {
                System.out.println("onError....................");
            }
        };

        myObservable.subscribe(mySubscriber);

运行结果:


四、Timer

创建一个Observable,它在一个给定的延迟后发射一个特殊的值

延迟2s后发送数据

Observable<Long> myObservable = Observable
                .timer(2,TimeUnit.SECONDS);
        Subscriber<Long> mySubscriber = new Subscriber<Long>() {
            @Override
            public void onNext(Long s) {
                System.out.println("onNext................."+s);
            }

            @Override
            public void onCompleted() {
                System.out.println("onCompleted.................");
            }

            @Override
            public void onError(Throwable e) {
                System.out.println("onError....................");
            }
        };
        myObservable.subscribe(mySubscriber);

运行结果:


五、Empty

创建一个不发射任何数据但是正常终止的Observable

六、Never

创建一个不发射数据也不终止的Observable
七、Throw

创建一个不发射数据以一个错误终止的Observable



搜索


  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值