Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to add delay when using .just() operator

I coded an Observable with the .just() operator as shown below in the code. what I am trxing to do is, to add a delay to the operator so that before the Integer value is emitted to the observer it should be delayed for feew seconds

something like:

mAsyncObservable = rx.Observable.create(new rx.Observable.OnSubscribe<Integer>() {
        @Override
        public void call(Subscriber<? super Integr> subscriber) {
            SystemClock.sleep(3000);

            subscriber.onNext(10);
            subscriber.onCompleted();
        }
    });

How to convert the same code using .just() operator?

code:

Subscriber<Integer> integerSubscriber = new Subscriber<Integer>() {
    private final String SubscriberTag = "integerSubscriber";
    @Override
    public void onStart() {
        super.onStart();
        Log.w(TAG, "onStart->" + SubscriberTag);
    }

    @Override
    public void onCompleted() {
        Log.w(TAG, "onCompleted->" + SubscriberTag);
    }

    @Override
    public void onError(Throwable e) {
        Log.w(TAG, "onError->" + SubscriberTag + e.getMessage().toString());
    }

    @Override
    public void onNext(Integer i) {
        Log.w(TAG, "onNext->" + SubscriberTag + "after processing " + i);
    }
};

 @Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);


    rx.Observable<Integer> integerObservable = rx.Observable.just(10);
    integerObservable.subscribe(integerSubscriber);
}
like image 845
LetsamrIt Avatar asked Sep 19 '25 03:09

LetsamrIt


1 Answers

You can use that:

Observable.just("Some").delay(1, TimeUnit.SECOND);

But remember, that delay() moves Observable's execution to another thread, so you should call following code if you want to perform some UI changes after delay:

 Observable.just("Some").delay(1, TimeUnit.SECOND).observeOn(AndroidSchedulers.mainThread());

EDIT

As @PPartisan said, you can also specify scheduler by passing it as third parameter to delay:

Observable.just("Some").delay(1, TimeUnit.SECOND, AndroidSchedulers.mainThread());
like image 117
Valentun Avatar answered Sep 20 '25 16:09

Valentun