日本搞逼视频_黄色一级片免费在线观看_色99久久_性明星video另类hd_欧美77_综合在线视频

國內最全IT社區平臺 聯系我們 | 收藏本站
阿里云優惠2
您當前位置:首頁 > php開源 > php教程 > RxJava retryWhen操作符實現錯誤重試機制

RxJava retryWhen操作符實現錯誤重試機制

來源:程序員人生   發布時間:2016-06-23 08:08:56 閱讀次數:3916次

業務需求

當我們在app里發起網絡要求時,可能會由于各種問題致使失敗。如何利用RxJava來實現出現毛病后重試若干次,并且可以設定重試的時間間隔。

具體實現

網絡要求使用Retrofit來做,還是使用上篇博客中的要求用戶信息接口

@GET("/userinfo?noToken=1") Observable<Response> getUserInfoNoToken();

下面是要求用戶信息接口的邏輯代碼

userApi.getUserInfoNoToken() //總共重試3次,重試間隔3000毫秒 .retryWhen(new RetryWithDelay(3, 3000)) .observeOn(AndroidSchedulers.mainThread()) .subscribeOn(Schedulers.io()) .subscribe(new Action1<Response>() { @Override public void call(Response response) { String content = new String(((TypedByteArray) response.getBody()).getBytes()); printLog(tvLogs, "", content); } }, new Action1<Throwable>() { @Override public void call(Throwable throwable) { throwable.printStackTrace(); } });

RetryWithDelay

public class RetryWithDelay implements Func1<Observable<? extends Throwable>, Observable<?>> { private final int maxRetries; private final int retryDelayMillis; private int retryCount; public RetryWithDelay(int maxRetries, int retryDelayMillis) { this.maxRetries = maxRetries; this.retryDelayMillis = retryDelayMillis; } @Override public Observable<?> call(Observable<? extends Throwable> attempts) { return attempts .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). printLog(tvLogs, "", "get error, it will try after " + retryDelayMillis + " millisecond, retry count " + retryCount); return Observable.timer(retryDelayMillis, TimeUnit.MILLISECONDS); } // Max retries hit. Just pass the error along. return Observable.error(throwable); } }); } }

如何摹擬重試呢?

方法1:把服務器關閉,關閉服務器后,客戶端要求接口的必定會報錯,看看是否是重試3次。

運行輸出:

'get error, it will try after 3000 millisecond, retry count 1' Main Thread:false, Thread Name:Retrofit-Idle 'get error, it will try after 3000 millisecond, retry count 2' Main Thread:false, Thread Name:Retrofit-Idle 'get error, it will try after 3000 millisecond, retry count 3' Main Thread:false, Thread Name:Retrofit-Idle

上面是重試3次了,但是我們怎樣知道,如果在服務器啟動后,在接下的重試中要求成功呢?接下來試試方法2。

方法2:先把服務器關閉,當點擊按鈕要求的同時,啟動Tomcat服務器

運行輸出:

'get error, it will try after 3000 millisecond, retry count 1' Main Thread:false, Thread Name:Retrofit-Idle 'get error, it will try after 3000 millisecond, retry count 2' Main Thread:false, Thread Name:Retrofit-Idle 'username:chiclaim,age:007' Main Thread:true, Thread Name:main

可以發現,在第3次重試的時候,服務器可用了。


github源碼下載

生活不易,碼農辛苦
如果您覺得本網站對您的學習有所幫助,可以手機掃描二維碼進行捐贈
程序員人生
------分隔線----------------------------
分享到:
------分隔線----------------------------
關閉
程序員人生
主站蜘蛛池模板: 黄网视频在线观看 | 久热99| 三级av在线| 日韩在线视频一区 | 国产精品毛片一区二区三区 | 在线视频h| 亚洲一区二区自拍 | 国产伦精品一区二区三区精品视频 | 亚洲视频免费在线 | 精品久久久久久国产 | av亚洲在线 | 蜜桃永久免费 | 日韩在线观看精品 | 91国内精品久久 | 亚洲精品在线观看视频 | 欧美一级黄色免费看 | 精品亚洲一区二区 | 欧美日一区二区 | 亚洲二区视频 | www国产亚洲精品久久麻豆 | 91超碰免费| 国产精品久久久久久久久久久久久 | 欧美视频网站 | 国产网站在线免费观看 | 美女视频网站久久 | 日韩av免费在线观看 | 欧美日韩一区二 | 婷婷久久久 | 成人动漫一区二区三区 | 国产一级片大全 | 亚洲国产精品久久久久秋霞不卡 | 亚洲精品视频在线 | rbd奴隷色のステージ2 | 国产精品一区二区三区久久久 | 成人久久久精品乱码一区二区三区 | 黄色av网页 | 欧美激情亚洲 | 欧美日韩在线视频免费观看 | 七七婷婷婷婷精品国产 | 久久久久美女 | 欧美综合精品 |