2016-07-27 14 views
1

verbinden Wie kann ich zwei Abonnements binden wie:Wie zwei Abonnements in RXJava/Android

1) Retrofit & RX, die in recyclerView gezeigt von Strings JSON in Liste umwandelt.

2) Und Jack Whartons RxBinding-Bibliothek reagiert auf Änderungen im EditText-Widget.

subscription = RxTextView 
      .textChangeEvents(editText) 
      .debounce(400, TimeUnit.MILLISECONDS) 
      .observeOn(Schedulers.newThread()) 
      .subscribe(new Observer<TextViewTextChangeEvent>() { 
       @Override 
       public void onCompleted() { 
        Log.i(TAG, "onCompleted"); 
       } 

       @Override 
       public void onError(Throwable e) { 
        Log.i(TAG, "onError >> " + e.getMessage()); 
       } 

       @Override 
       public void onNext(TextViewTextChangeEvent textViewTextChangeEvent) { 
        Log.i(TAG, textViewTextChangeEvent.text().toString()); 
       } 
      }); 

, um eine Liste zu erhalten, die mit EditText dynamisch gefiltert wird. Soll ich Klassen wie Subject oder etw benutzen? Wenn ja, wie sollte es dann aussehen? Vielen Dank für die Hilfe :)

Antwort

1

Sie flatMap Betreiber

subscription = RxTextView 
      .textChangeEvents(editText) 
      .debounce(400, TimeUnit.MILLISECONDS) 
      .map(new Func1<TextViewTextChangeEvent, String>() { 
       @Override 
       public String call(TextViewTextChangeEvent textViewTextChangeEvent) { 
        return textViewTextChangeEvent.text(); 
       } 
      }) 
      .flatMap(new Func1<String, Observable<CatFactsResponse>>() { 
       @Override 
       public Observable<CatFactsResponse> call(String text) { 
        return restClient.getCatFacts(text) 
          .subscribeOn(Schedulers.io()) 
          .observeOn(AndroidSchedulers.mainThread()); 
       } 
      }) 
      .subscribe(...); 
+0

Ausgezeichnete Antwort verwenden sollten. Jetzt weiß ich endlich wie ich solche Beziehungen eingehen kann :) – Glaeqen