服务器的轮询操做
- 好比向服务器获取短信验证码
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检验,转存