如何避免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); 
} 
+0

发生错误时,您想要做什么? –

+0

只是忽略它,继续前进。它是自动完成的。例如,当没有网络连接时,调用onError并停止observable。我希望它在网络连接回来时发出。 –

+1

我对RxJava不太熟悉,但听起来像'retryWhen'。 https://github.com/ReactiveX/RxJava/wiki/Error-Handling-Operators –

很简单,只是忽略错误:

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

注意,这是潜在的危险,因为你会忽略所有错误;在这种情况下它可能是好的,但要小心过度使用。

+0

嗨@Tassos,谢谢,但重试似乎为我工作。它不停止观察。你能告诉我为什么我应该使用onErrorResumeNext()而不是retry()?或者这只是替代建议? –

+0

如果在'flatMap'后添加'retryWhen',它将取消订阅并重新订阅原始的observable,这意味着您将失去400 ms的去抖动。 –

+0

非常感谢,@Tassos。 –