Rxjava 项目

3 篇文章 0 订阅
1 篇文章 0 订阅


just:任意对象转成Observable
示例:Observable.just(new Object())
</pre><pre code_snippet_id="1723508" snippet_file_name="blog_20160621_1_4487781" name="code" class="java">range(n, m):循环一个数组
示例:Observable.range(1, 4
结果:1,2,3,4
说明:从n到m的连续数组。
</pre><pre code_snippet_id="1723508" snippet_file_name="blog_20160621_1_4487781" name="code" class="java">retryWhen:失败以后重试机制。可以用于网络请求重试
示例:Observable.retryWhen(new RetryWithDelay(5, 1000)



</pre><pre code_snippet_id="1723508" snippet_file_name="blog_20160621_1_4487781" name="code" class="java">
public class RetryWithDelay
          implements Func1<Observable<? extends Throwable>, Observable<?>> {

        private final int _maxRetries;
        private final int _retryDelayMillis;
        private int _retryCount;

        public RetryWithDelay(final int maxRetries, final int retryDelayMillis) {
            _maxRetries = maxRetries;
            _retryDelayMillis = retryDelayMillis;
            _retryCount = 0;
        }

        // this is a notificationhandler, all that is cared about here
        // is the emission "type" not emission "content"
        // only onNext triggers a re-subscription (onError + onComplete kills it)

        @Override
        public Observable<?> call(Observable<? extends Throwable> inputObservable) {

            // it is critical to use inputObservable in the chain for the result
            // ignoring it and doing your own thing will break the sequence

            return inputObservable.flatMap(new Func1<Throwable, Observable<?>>() {
                @Override
                public Observable<?> call(Throwable throwable) {
                    if (++_retryCount < _maxRetries) {

                        // When this Observable calls onNext, the original
                        // Observable will be retried (i.e. re-subscribed)

                        Timber.d("Retrying in %d ms", _retryCount * _retryDelayMillis);
                        _log(String.format("Retrying in %d ms", _retryCount * _retryDelayMillis));

                        return Observable.timer(_retryCount * _retryDelayMillis,
                              TimeUnit.MILLISECONDS);
                    }

                    Timber.d("Argh! i give up");

                    // Max retries hit. Pass an error so the chain is forcibly completed
                    // only onNext triggers a re-subscription (onError + onComplete kills it)
                    return Observable.error(throwable);
                }
            });
        }
    }


说明:重试5次,间隔1000毫秒。一般用于网络不好的轮询。

 

MathObservable:算术和聚合对象

使用:MathObservable .sumInteger(Observable.range(1, 5))

说明:1-5所有数相加的各。

结果:1+2+3+4+5 = 15


注意:range,from一级别的方法,都是在一个线程内完成。走到delay这一步,开始开线程执行,如果有List代表一次开List.size条线程开始定时。所以onNext方法相差的时间差为每条线程的时间差


defer:延迟加载。

 i=10;
        Observable justObservable = Observable.just(i);
        i=12;
        Observable deferObservable = Observable.defer(new Func0<Observable<Object>>() {
            @Override
            public Observable<Object> call() {
                return Observable.just(i);
            }
        });
        i=15;

        justObservable.subscribe(new Subscriber() {
            @Override
            public void onCompleted() {

            }

            @Override
            public void onError(Throwable e) {

            }

            @Override
            public void onNext(Object o) {
                System.out.println("just result:" + o.toString());
            }
        });

        deferObservable.subscribe(new Subscriber() {
            @Override
            public void onCompleted() {

            }

            @Override
            public void onError(Throwable e) {

            }

            @Override
            public void onNext(Object o) {
                System.out.println("defer result:" + o.toString());
            }
        });
   }


结果:

just result:10 
defer result:15



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值