RxJava常用的操作

服务器的轮询操作

  • 比如向服务器获取短信验证码
    public void getMsgCodeWithRetry(String token ,String projectId,String phone)
    {
        EmaMsgModel emaMsgModel = new EmaMsgModel();
        Observable.interval(5,TimeUnit.SECONDS)
                .take(11)
                .flatMap(new Func1<Long, Observable<String>>() {
                    @Override
                    public Observable<String> call(Long aLong) {
                        Log.v(TAG,"flatMap:" + String.valueOf(aLong));
                        if(aLong == 10)
                        {
                            throw new RuntimeException("获取验证码超过十次了");
                        }
                        return emaMsgModel.getMsgCode_EMA(token,projectId,phone);
                    }
                })
                .takeUntil(new Func1<String, Boolean>() {
                    @Override
                    public Boolean call(String s) {
                        Log.v(TAG,"takeUntil:" + s);
                        return !s.contains("False");
                    }
                })
                .filter(new Func1<String, Boolean>() {
                    @Override
                    public Boolean call(String s) {
                        Log.v(TAG,"filter:" + s);
                        return !s.contains("False");
                    }
                })

                .subscribe(new Action1<String>() {
                    @Override
                    public void call(String s) {
                        Log.v(TAG,"Action1:" + s);

                    }
                }, new Action1<Throwable>() {
                    @Override
                    public void call(Throwable throwable) {
                        Log.v(TAG,throwable.getMessage());
                        throwable.printStackTrace();
                    }
                }, new Action0() {
                    @Override
                    public void call() {
                        Log.v(TAG,"onComplete");
                    }
                });
    }

执行结果

12-06 05:54:59.936 21790-21892/com.lt.accesstask V/MainActivity: flatMap:0

12-06 05:55:00.176 21790-21892/com.lt.accesstask V/MainActivity: filter:False:没有短信,请5秒后再试

12-06 05:55:00.176 21790-21892/com.lt.accesstask V/MainActivity: takeUntil:False:没有短信,请5秒后再试

12-06 05:55:04.934 21790-21892/com.lt.accesstask V/MainActivity: flatMap:1

12-06 05:55:05.288 21790-21892/com.lt.accesstask V/MainActivity: filter:False:没有短信,请5秒后再试

12-06 05:55:05.288 21790-21892/com.lt.accesstask V/MainActivity: takeUntil:False:没有短信,请5秒后再试

......

12-06 05:55:44.935 21790-21892/com.lt.accesstask V/MainActivity: flatMap:9

12-06 05:55:45.118 21790-21892/com.lt.accesstask V/MainActivity: filter:False:没有短信,请5秒后再试

12-06 05:55:45.118 21790-21892/com.lt.accesstask V/MainActivity: takeUntil:False:没有短信,请5秒后再试

12-06 05:55:49.937 21790-21892/com.lt.accesstask V/MainActivity: flatMap:10

12-06 05:55:49.948 21790-21892/com.lt.accesstask V/MainActivity: 获取验证码超过十次了

12-06 05:55:49.950 21790-21892/com.lt.accesstask W/System.err: at com.lt.accesstask.MainActivity$1.call(MainActivity.java:107)

12-06 05:55:49.951 21790-21892/com.lt.accesstask W/System.err: at com.lt.accesstask.MainActivity$1.call(MainActivity.java:102)

打印一组数据,可以指定间隔时间

可以将该数据打包在一个数据中,用interval和take操作符进行打印。

批量下载多个任务

  • 比如同时下载七八个文件,下载完成之后MD5检验,转存

转载于:https://my.oschina.net/u/3246345/blog/1585534

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值