多多色-多人伦交性欧美在线观看-多人伦精品一区二区三区视频-多色视频-免费黄色视屏网站-免费黄色在线

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

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

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

業務需求

當我們在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源碼下載

生活不易,碼農辛苦
如果您覺得本網站對您的學習有所幫助,可以手機掃描二維碼進行捐贈
程序員人生
------分隔線----------------------------
分享到:
------分隔線----------------------------
關閉
程序員人生
主站蜘蛛池模板: 日本免费一区二区三区最新vr | 日韩理伦片秋霞理伦 | 欧美日韩中文字幕一区二区高清 | 欧美18videosex性 | 春色视频 | 在线成人免费观看国产精品 | 尤物视频在线观看免费视频 | 欧美一级日韩一级亚洲一级 | 亚洲精品一区久久狠狠欧美 | 亚洲图片欧美文学小说激情 | 日本欧美精品 | 伊人国产在线观看 | 国产精品日产三级在线观看 | 欧美一区二区自偷自拍视频 | 欧美日韩中文字幕一区二区高清 | 免费的国语一级淫片 | 综合 欧美 小说 另类 图 | 国产成人久久精品二区三区牛 | 成人午夜视频一区二区国语 | 亚洲三级色 | 亚洲成人h | 亚洲人成网站在线观看播放青青 | 国产三级做爰高清视频a | 黄色a大片 | 日韩精品一区二区三区在线观看l | www日韩精品 | 黄色一级欧美 | 老司机午夜免费 | 波多野结衣在线不卡 | 亚洲一区在线播放 | 国产精品三区四区 | 午夜秋霞成人理论 | 青青国产成人精品视频 | 欧美在线色 | 欧美国产精品亚洲精品第一区 | 大香伊人久久 | 波多野结衣在线免费观看视频 | 久久精品国产免费一区 | 宇都宫紫苑乳在线观看 | 国产毛片久久久久久国产毛片 | 另类激情亚洲 |