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:0java

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秒后再试ide

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

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

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

......it

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

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秒后再试class

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检验,转存
相关文章
相关标签/搜索