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);
}
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());
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With