2015-09-11 19 views
22

Quindi sto cercando di creare un osservabile che si attiva regolarmente, ma per qualche motivo che non riesco a capire, si attiva solo una volta. Qualcuno può vedere cosa sto facendo di sbagliato?Android RX - Observable.timer che si attiva solo una volta

Observable<Long> observable = Observable.timer(delay, TimeUnit.SECONDS, Schedulers.io()); 

     subscription = observable 
       .subscribeOn(Schedulers.io()) 
       .observeOn(AndroidSchedulers.mainThread()) 
       .subscribe(new Action1<Long>() { 
        @Override 
        public void call(Long aLong) { 
         searchByStockHelper.requestRemoteSearchByStock(); 
        } 
       }); 

attualmente ritardo è impostato su 2

risposta

40

La documentazione per the timer operator dice questo:

Crea un osservabile che emette un particolare elemento dopo un certo ritardo

Così il il comportamento che si sta osservando è previsto- timer() emette solo un singolo oggetto dopo un ritardo.

The interval L'operatore, d'altro canto, emetterà elementi distanziati con un determinato intervallo.

Ad esempio, questo Osservabile emetterà un elemento ogni secondo:

Observable.interval(1, TimeUnit.SECONDS); 
+0

Ehi, ho appena scoperto questo allo stesso tempo. Grazie mille per il tuo aiuto –

6

So argomento è vecchio, ma forse per i futuri visitatori. (5 minuti di conto alla rovescia)

Disposable timerDisposable = Observable.interval(1,TimeUnit.SECONDS, Schedulers.io()) 
     .take(300) 
     .map(v -> 300 - v) 
     .subscribe(
      onNext -> { 
       //on every second pass trigger 
      }, 
      onError -> { 
       //do on error 
      }, 
      () -> { 
       //do on complete 
      }, 
      onSubscribe -> { 
       //do once on subscription 
      }); 
+0

Bella soluzione! –

Problemi correlati