抑郁症健康,内容丰富有趣,生活中的好帮手!
抑郁症健康 > 提交失败重连java_RxJava出错重连

提交失败重连java_RxJava出错重连

时间:2019-09-13 05:47:39

相关推荐

retryWhen

模拟网络请求出错重连

/**

* 重连三次

* 测试:第三次重连时模拟请求成功,前两次发送错误

*/

fun retry() {

var num = 0//记录重连次数

Observable.timer(1, TimeUnit.SECONDS).doOnSubscribe {

System.out.println("subscribing")

}.map {

if (++num > 2)

return@map 1

throw RuntimeException()

}.retryWhen {

val counter = AtomicInteger()

it.takeWhile {

counter.getAndIncrement() != 3

}.flatMap {

System.out.println("delay retry by " + counter.get() + " second(s)")

Observable.timer(counter.toLong(), TimeUnit.SECONDS)

}

}.observeOn(AndroidSchedulers.mainThread())

.subscribeOn(Schedulers.io())

.subscribeBy {

System.out.println("subscribeBy$it")

}

}

解决多次调用retry(),在subscribe之前dispose掉之前的

private var disposable: Disposable? = null

/**

* 重连三次

* 测试:第三次重连时模拟请求成功,前两次发送错误

*/

fun retry() {

var num = 0//记录重连次数

disposable = Observable.timer(1, TimeUnit.SECONDS)

.map {

if (++num > 2)

return@map 1

throw RuntimeException()

}.retryWhen {

val counter = AtomicInteger()

it.takeWhile {

counter.getAndIncrement() != 3

}.flatMap {

System.out.println("delay retry by " + counter.get() + " second(s)")

Observable.timer(counter.toLong(), TimeUnit.SECONDS)

}

}.observeOn(AndroidSchedulers.mainThread())

.subscribeOn(Schedulers.io())

.doOnSubscribe {

//retryWhen之后调用一次,之前每次重连都调用

disposable?.dispose()

System.out.println("subscribing")

}.subscribeBy {

System.out.println("subscribeBy$it")

}

}

将重连放到扩展函数中

fun ret() {

var num = 0//记录重连次数

disposable = Observable.timer(1, TimeUnit.SECONDS)

.map {

if (++num > 2)

return@map 1

throw RuntimeException()

}.subscribeByThreadRetry(disposable) {

System.out.println("subscribeByThreadRetry:$it")

}

}

fun Observable.subscribeByThreadRetry(

disposable: Disposable?,

onErrStub: (Throwable) -> Unit = {},

onNextStub: (T) -> Unit = {}): Disposable = this.retryWhen {

val counter = AtomicInteger()

it.takeWhile {

counter.getAndIncrement() != 3

}.flatMap {

Observable.timer(counter.toLong(), TimeUnit.SECONDS)

}

}.observeOn(AndroidSchedulers.mainThread())

.subscribeOn(Schedulers.io())

.doOnSubscribe {

//retryWhen之后调用一次,之前每次重连都调用

disposable?.dispose()

}.subscribeBy(onErrStub, {}, onNextStub)

如果觉得《提交失败重连java_RxJava出错重连》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。