如何避免在 onError 之后出现可观察的停止

How to avoid observable stopping after onError

onError 之后,我的 Observable 停止工作。我怎样才能避免这种情况?

这是我的自动完成可观察和订阅代码:

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())

请注意,这有潜在的危险,因为您将忽略 所有 错误;在这种情况下它可能没问题,但要小心不要过度使用它。

使用 tryOnError 对我有用,它也会在 subscribe() 内调用错误,而不会得到 UndeliverableException、应用程序停止 运行 或需要 RxJavaPlugins.setErrorHandler这将使 UI 相关的问题更难处理。