Observable<String> myObservable = Observable.create(
new Observable.OnSubscribe<String>() {
@Override
public void call(Subscriber<? super String> sub) {
sub.onNext("Serious Rr business.");
sub.onCompleted();
}
}
);Subscriber<String> mySubscriber = new Subscriber<String>() {
@Override
public void onNext(String s) { System.out.println(s); }
@Override
public void onCompleted() { }
@Override
public void onError(Throwable e) { }
};Observable<String> myObservable = Observable.create(
new Observable.OnSubscribe<String>() {
@Override
public void call(Subscriber<? super String> sub) {
sub.onNext("Serious Rr business.");
sub.onCompleted();
}
}
);
Subscriber<String> mySubscriber = new Subscriber<String>() {
@Override
public void onNext(String s) { System.out.println(s); }
@Override
public void onCompleted() { }
@Override
public void onError(Throwable e) { }
};
myObservable.subscribe(mySubscriber);
// Output: "Serious Rr business."The Observable pattern maps easily to these problems
We sure do:
With operators we can:
our Rx Streams -> huge flexibility.
The Subscriber can control threading via operators & Schedulers
.subscribeOn(<Scheduler>) -> work will be done on this Scheduler
.observeOn(<Scheduler>) -> events will be received on this Scheduler
Schedulers.newThread() -> new thread for each job
Schedulers.immediate() -> execute job in current context
Schedulers.from(<Executor>) -> use any Executor for job execution
AndroidSchedulers.mainThread() -> execute job on UI thread
Etc...
Observable.just(1, 2, 3, 4, 5, 6, 7, 8, 9, 10)
.filter(new Func1<Integer, Boolean>() {
@Override
public Boolean call(Integer value) {
return value % 2 == 0;
}
})
.buffer(3)
.subscribeOn(Schedulers.newThread())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(new Action1<List<Integer>>() {
@Override
public void call(List<Integer> value) {
Log.d("Out", "Got: " + value);
}
});Output:
Got: [2, 4, 6]
Got: [8, 10]