如何在Android中使用rxJava显示网络错误时重试网络调用。
这是我的rxJave代码:
RxTextView.textChanges(searchInput)
.debounce(500, TimeUnit.MILLISECONDS)
.map(CharSequence::toString)
.filter(s -> !s.isEmpty())
.subscribeOn(AndroidSchedulers.mainThread())
.observeOn(Schedulers.io())
.switchMap(query -> getTypedPlaces(query))
.observeOn(AndroidSchedulers.mainThread())
.subscribe(results -> showResult(results));
它运行良好,但我需要在连接断开时重试网络请求。
答案 0 :(得分:-1)
制作PublishSubject
并添加retryWhen(subject)
。
然后听取连接的变化,当网络可用时调用subject.onNext(null)
,如果您的rx链正在停止,它将重试。
.switchMap(query -> getTypedPlaces(query).retryWhen(subject))
其他说明......
.subscribeOn(AndroidSchedulers.mainThread())
是多余的,因为TextView上的事件来自mainThread。
.observeOn(Schedulers.io())
可能没有必要,或者您可以专门在去抖动中设置调度程序。