相信大多数人都在用rxjava+retrofit网络框架,在用着框架的时候我们不难发现,一些复杂,连续请求不再复杂,那么我今天提到的retrywhen操作符作用是什么呐?
在我们开发过程中肯定有网络请求断开,失败的情况,可是用户的网络立马又回复正常了,这时候我们突然给用户toast一个网络请求失败,很明显这种体验度不是很好.下面我就贴上我用retrywhen实现重连请求的代码:
val loginService = Retrofit.Builder().addCallAdapterFactory(RxJava2CallAdapterFactory.create())
.addConverterFactory(GsonConverterFactory.create())
.baseUrl("")
.client(OkHttpClient.Builder()
.readTimeout(15, TimeUnit.SECONDS)
.writeTimeout(15, TimeUnit.SECONDS)
.connectTimeout(5, TimeUnit.SECONDS)
.addInterceptor(HttpLoggingInterceptor().setLevel(HttpLoggingInterceptor.Level.BODY))
.build())
.build().create(Api.LoginService::class.java)
loginService.doLogin("", "", "")
.retryWhen { throwableObservable ->
throwableObservable.flatMap<Any> { throwable ->
//--是网络异常或者i/o并且重连次数小于3就重新发送请求
if (throwable is IOException && ++retrycount < 3) {
Log.e("--throwable-", "第" + retrycount + "次重试")
Observable.timer(3, TimeUnit.SECONDS)
} else
Observable.error<Any>(throwable)
}
}
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(object : BaseObserver() {
override fun onNext(t: Any) {
}
override fun onError(e: Throwable) {
}
})
————————————————
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
原文链接:https://blog.csdn.net/ZyClient/article/details/87251790