2015-12-15 7 views
8

ho usato rxandroid per il funzionamento di rimbalzo su una ricerca EditTexteventi TextView RxAndroid chiamato automaticamente prima di eventi di modifica del testo

ho usato

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

e osservatore come

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

Il mio problema è il link viene chiamato anche prima che si verifichino cambiamenti di edittext. E non chiama gli eventi textchange. Mi manca qualcosa Cosa sto facendo di sbagliato qui. Sono nuovo di rxandroid e rxjava.

ho usato

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

EDIT:

Ora funziona ora, mi è stato sempre un puntatore nullo nella mia logica per la lista di ottenere .. quando ho usato il metodo onError e mettere un Stacktrace ho trovato il problema.

E se si desidera saltare la chiamata iniziale, è necessario chiamare .skip (1) all'oggetto di abbonamento. [Grazie a Daniel Lew]

Il codice precedente funziona perfettamente ora

+0

Qual è il contenuto del TextViewChangeEvent? –

+0

TextViewTextChangeEvent è una classe all'interno di com.jakewharton.rxbinding: rxbinding per ottenere eventi di edittext suppongo che sia –

+0

lo so. Cosa viene restituito quando si chiama 'onTextChangeEvent.text()' e si registra il risultato? –

risposta

38

RxTextView.textChanges() emette il valore attuale del testo TextView prima di emettere eventuali modifiche. Vedi the documentation.

Se vuoi per evitare il bouncing solo le modifiche, quindi si dovrebbe aggiungere skip(1), che ignorerà l'emissione iniziale:

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

grazie che era ottima informazione –

+0

Ho anche usato: RxTextView.textChangeEvents (searchStation) .filter {! It.text(). IsEmpty()} –

+6

In rxBinding2 (almeno) è possibile utilizzare .skipInitialValue() – xklakoux