在RxJava中重试网络调用

时间:2016-09-24 14:53:48

标签: android rx-java

如何在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));

它运行良好,但我需要在连接断开时重试网络请求。

1 个答案:

答案 0 :(得分:-1)

制作PublishSubject并添加retryWhen(subject)

然后听取连接的变化,当网络可用时调用subject.onNext(null),如果您的rx链正在停止,它将重试。

.switchMap(query -> getTypedPlaces(query).retryWhen(subject))

其他说明......

.subscribeOn(AndroidSchedulers.mainThread())是多余的,因为TextView上的事件来自mainThread。

.observeOn(Schedulers.io())可能没有必要,或者您可以专门在去抖动中设置调度程序。