在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);
}
答案 0 :(得分:1)
这很简单,只需忽略错误:
autoCompleteService.getAutoCompleteTerms(text).onErrorResumeNext(Observable.empty())
请注意,这有潜在危险,因为您将忽略所有错误;在这种情况下,它可能没问题,但要小心过度使用它。
答案 1 :(得分:0)
使用 tryOnError
对我有用,它也会在 subscribe()
内调用错误,而不会得到 UndeliverableException
、应用停止运行或需要 RxJavaPlugins.setErrorHandler
这将使 UI 更相关难以处理。