2015-12-15 6 views
8

I rxandroid für debounce Betrieb auf einer EditText Suche verwendetRxAndroid Textview Ereignisse automatisch vor Text Änderungsereignisse genannt

I verwendet

private void setUpText() { 
     _mSubscription = RxTextView.textChangeEvents(searchStation)// 
       .debounce(500, TimeUnit.MILLISECONDS)// default Scheduler is Computation 
       .observeOn(AndroidSchedulers.mainThread())// 
       .subscribe(getOps().getdata()); 
    } 

und Beobachter als

public Observer<TextViewTextChangeEvent> getdata() 
    { 

     return new Observer<TextViewTextChangeEvent>() { 
      @Override 
      public void onCompleted() { 

      } 

      @Override 
      public void onError(Throwable e) { 
       e.printStackTrace(); 
      } 

      @Override 
      public void onNext(TextViewTextChangeEvent onTextChangeEvent) { 
//    stationsugession(onTextChangeEvent.text().toString()); 

       //here i called link to get the data from the server 
      } 
     }; 
    } 

Mein Problem ist der Link wird aufgerufen, bevor Änderungen am Edittext auftreten. Und es ruft nicht die textchange events auf. Bin ich etwas fehlt Was mache ich hier falsch. Ich bin neu bei rxandroid und rxjava.

benutzte ich

compile 'io.reactivex:rxandroid:1.1.0' 
    compile 'io.reactivex:rxjava:1.1.0' 
    compile 'com.jakewharton.rxbinding:rxbinding:0.2.0' 

EDIT:

Es funktioniert nun jetzt, ich wurde in meiner Logik für das Erhalten Liste einen Null-Zeiger bekommen .. wenn ich die onError Methode verwendet und ein setzen Stacktrace Ich habe das Problem gefunden. Wenn Sie den ersten Anruf überspringen möchten, rufen Sie bitte .skip (1) an. [Dank Daniel Lew]

Der obige Code funktioniert perfekt jetzt

+0

Was ist der Inhalt des TextViewChangeEvent? –

+0

TextViewTextChangeEvent ist eine Klasse innerhalb von com.jakewharton.rxbinding: rxbinding für das Abrufen von Editiertext-Ereignissen Ich denke –

+0

Ich weiß. Was wird zurückgegeben, wenn Sie 'onTextChangeEvent.text()' aufrufen und das Ergebnis protokollieren? –

Antwort

38

RxTextView.textChanges() gibt den aktuellen Textwert des TextView, bevor Sie Änderungen zu emittieren. Siehe the documentation.

Wenn Sie nur wollen, um die Änderungen Entprellen, dann sollten Sie fügen skip(1), die die anfängliche Emissions ignorieren:

_mSubscription = RxTextView.textChangeEvents(searchStation) 
    .skip(1) 
    .debounce(500, TimeUnit.MILLISECONDS) 
    .observeOn(AndroidSchedulers.mainThread()) 
    .subscribe(getOps().getdata()); 
+0

danke das war super information –

+0

Ich habe auch verwendet: RxTextView.textChangeEvents (searchStation) .filter {! It.text(). IsEmpty()} –

+6

In rxBinding2 (zumindest) können Sie .skipInitialValue() verwenden – xklakoux

Verwandte Themen