Search code examples
androidrx-java2repeat

Best way to repeat an observable every minute rxjava


I have the following method:

public class ParentalControlInteractor {
   public Single<Boolean> isPinSet() {
       return bamSdk.getPinManager().isPINSet();
   }
}

I want to call this function to run once, then repeat every minute until infinity but this seems clumsy:

    parentalControlInteractor.isPinSet()
            .subscribeOn(Schedulers.io())
            .repeat(10000)
            .timeout(1600,TimeUnit.MILLISECONDS)
            .doOnError(throwable -> {
                Timber.e(throwable,"Error getting if Pin is set");
                throwable.printStackTrace();
            })
            .subscribe(isPinSet -> {
                this.isPinSet = isPinSet;
                Timber.d("Pin is set = " + isPinSet.toString());
                });

Isn't there a better way to do it? I'm using RxJava2. Also, the method above only calls it 10000 times. I want to call it forever, like using Handler.postDelayed().


Solution

  • It turns out this is doing the job:

    parentalControlInteractor.isPinSet()
                .subscribeOn(Schedulers.io())
                .delay(10000,TimeUnit.MILLISECONDS)
                .repeat()
                .doOnError(throwable -> {
                    Timber.e(throwable,"Error getting if Pin is set");
                    throwable.printStackTrace();
                })
                .subscribe(isPinSet -> {
                    this.isPinSet = isPinSet;
                    Timber.d("Pin is set = " + isPinSet.toString());
                    });