如何避免onError后出现可观察到的停止
onError
之后,我的观测值停止工作。我怎样才能避免这种情况?如何避免onError后出现可观察到的停止
这是我的自动完成观察到的,申购代码:
public void subscribeAutoComplete() {
autoSubscription = RxTextView.textChangeEvents(clearableEditText)
.skip(1)
.map(textViewTextChangeEvent -> textViewTextChangeEvent.text().toString())
.filter(s -> s.length() > 2)
.debounce(400, TimeUnit.MILLISECONDS)
.flatMap(text -> autoCompleteService.getAutoCompleteTerms(text)
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread()))
.observeOn(AndroidSchedulers.mainThread())
.subscribe(new Subscriber<List<String>>() {
@Override
public void onCompleted() {
Log.d("rx", "oncomplete");
}
@Override
public void onError(Throwable t) {
Log.e("rx", t.toString());
}
@Override
public void onNext(List<String> strings) {
autoAdapter = new ArrayAdapter<>(MainActivity.this,
android.R.layout.simple_dropdown_item_1line, strings);
clearableEditText.setAdapter(autoAdapter);
clearableEditText.showDropDown();
}
});
compositeSubscriptions.add(autoSubscription);
}
很简单,只是忽略错误:
autoCompleteService.getAutoCompleteTerms(text).onErrorResumeNext(Observable.empty())
注意,这是潜在的危险,因为你会忽略所有错误;在这种情况下它可能是好的,但要小心过度使用。
嗨@Tassos,谢谢,但重试似乎为我工作。它不停止观察。你能告诉我为什么我应该使用onErrorResumeNext()而不是retry()?或者这只是替代建议? –
如果在'flatMap'后添加'retryWhen',它将取消订阅并重新订阅原始的observable,这意味着您将失去400 ms的去抖动。 –
非常感谢,@Tassos。 –
发生错误时,您想要做什么? –
只是忽略它,继续前进。它是自动完成的。例如,当没有网络连接时,调用onError并停止observable。我希望它在网络连接回来时发出。 –
我对RxJava不太熟悉,但听起来像'retryWhen'。 https://github.com/ReactiveX/RxJava/wiki/Error-Handling-Operators –