2016-12-20 9 views
1

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 –

答えて

1

それはちょうど、エラーを無視し、簡単です:あなたはすべてを無視するだろうとして、これは、潜在的に危険であることを

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

注意エラー。この場合はおそらくOKですが、これを過度に使用することには注意してください。

+0

こんにちは@タソス、ありがとう、再試行は私のために働くようです。それは観測を止めることはありません。 retry()の代わりにonErrorResumeNext()を使用する理由を教えてください。それとも代替案ですか? –

+0

'flatMap'の後ろに' retryWhen'を追加すると、それは元の観測可能なものから脱退して再登録されます。つまり、400msのデバウンスを失います。 –

+0

ありがとう、@タソス。 –

関連する問題