0

I'm new with rxjava.

implementation "io.reactivex.rxjava2:rxjava:2.2.8"
implementation 'io.reactivex.rxjava2:rxandroid:2.1.1'

I'm working with interval(),

I don't know how to show View in onComplete() of rxjava without block UI Thread.

Or call onComplete() from onNext() in below codes :

Observable
                    .interval(0, 5, TimeUnit.SECONDS)
                    .subscribeOn(Schedulers.io())
                    .observeOn(AndroidSchedulers.mainThread())
                    .subscribe(aLong -> {
                        Log.d("", "onNext()");
                    }, Throwable::printStackTrace, () -> {
                        Log.d("", "onComplete()");

                        Log.d("", "SHOW POP UP");

                        showView();
                    });

People who know,

Please tell me,

Thank you,

Huy Tower
  • 7,769
  • 16
  • 61
  • 86
  • Lambda passed in `#Subcribe` will get called on main thread because of `observeOn(AndroidSchedulers.mainThread())`. So you can access UI element there . – ADM Aug 19 '20 at 04:44

1 Answers1

1

Following code may work.

 Observable
            .interval(0, 5, TimeUnit.SECONDS)
            .subscribeOn(Schedulers.io())
            .observeOn(AndroidSchedulers.mainThread())
            .subscribe(new Observer<Long>() {
                
                Disposable d;
                
                @Override
                public void onSubscribe(@NonNull Disposable d) {
                    this.d = d;
                }

                @Override
                public void onNext(@NonNull Long aLong) {
                    if(!d.isDisposed()) {
                        this.onComplete(); // this will call onComplete()
                        d.dispose();
                    }
                }

                @Override
                public void onError(@NonNull Throwable e) {

                }

                @Override
                public void onComplete() {
                    showView();
                }
            });
shafayat hossain
  • 1,089
  • 1
  • 8
  • 13