3

之后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);
}
4

2 回答 2

2

这很简单,只需忽略错误:

autoCompleteService.getAutoCompleteTerms(text).onErrorResumeNext(Observable.empty())

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

于 2016-12-21T22:18:47.257 回答
0

使用tryOnError对我有用,它也会在内部调用错误subscribe(),而不会获取UndeliverableException,应用程序停止运行或需要RxJavaPlugins.setErrorHandler它会使与 UI 相关的更难处理。

于 2021-04-10T09:53:25.890 回答