retrywhen实现重连(kotlin)

84 篇文章 5 订阅
本文介绍了如何在使用RxJava和Retrofit网络框架时,通过retryWhen操作符处理网络请求断开或失败的情况,实现合理的重连逻辑,提升用户体验。
摘要由CSDN通过智能技术生成

相信大多数人都在用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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值