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

时间:2016-12-20 22:45:17

标签: android rx-java rx-binding

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);
}

2 个答案:

答案 0 :(得分:1)

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

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

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

答案 1 :(得分:0)

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