on
[Android] Rx java Observable 기본 함수 (merge, flatMap, create,just...
[Android] Rx java Observable 기본 함수 (merge, flatMap, create,just...
Observable.create()
Lambda 표현을 쓸 수 있지만 내부 객체의 익명클래스가 어떤건지 명확하게 하기 위해서 람다표현을 사용하지 않았습니다.
사용방법은 간단한데, create함수는 onSubscribe객체를 파라미터로 가지며, 구독이 발생하면 이 객체의 call()함수가 실행됩니다.
리스너에게 콜백함수를 호출시켜주는 것과 같은원리
코드를 보자!
Observable observable = Observable.create(new ObservableOnSubscribe() { @Override public void subscribe(@NonNull ObservableEmitter emitter) throws Exception { emitter.onNext(1L); } }); observable.subscribe( new Observer() { @Override public void onSubscribe(@NonNull Disposable d) { } @Override public void onNext(@NonNull Long aLong) { System.out.println("sout onNext"); } @Override public void onError(@NonNull Throwable e) { } @Override public void onComplete() { } } ); // sout onNext
emiiter에게 onNext를 주면 onNext가 호출되고 onError를 주면 onError가 호출된다.
Ovservable.flatMap()
각 API 호출 간의 의존성이 있을때 사용한다.
첫번째 API 호출을 통해 얻은 결과를 두번째 API 에서 사용할때
Observable observable1 = Observable.create(new ObservableOnSubscribe() { @Override public void subscribe(@NonNull ObservableEmitter emitter) throws Exception { emitter.onNext(1L); } }); Observable observable2 = Observable.create(new ObservableOnSubscribe() { @Override public void subscribe(@NonNull ObservableEmitter emitter) throws Exception { emitter.onNext(2L); } }); observable1 .flatMap(new Function>() { @Override public ObservableSource apply(@NonNull Long aLong) throws Exception { System.out.println("observable1 : " + aLong); return observable2; } }) .subscribe( new Consumer() { @Override public void accept(Object o) throws Exception { System.out.println(o); } } ); > Task :test.main() observable1 : 1 2
Ovservable.merge()
두개의 타임새틈프를 합쳐 하나의 타임스탬프에서 발행하는것처럼 변경해준다.
각각의 API 결과를 한곳에서 처리하고 싶을 때 사용한다.
여러개의 Observable 소스에서 발행한 데이터를 모아서 한곳에서 모두 받을 수 있게 해준다.
Observable observable = Observable.create(new ObservableOnSubscribe() { @Override public void subscribe(@NonNull ObservableEmitter emitter) throws Exception { emitter.onNext(1L); } }); Observable observable2 = Observable.create(new ObservableOnSubscribe() { @Override public void subscribe(@NonNull ObservableEmitter emitter) throws Exception { emitter.onNext(2L); } }); observable.merge(observable,observable2) .subscribe( new Consumer() { @Override public void accept(Object o) throws Exception { System.out.println("call : " + o); } } ); > Task :test.main() call : 1 call : 2
from http://jhy156456.tistory.com/188 by ccl(A) rewrite - 2021-10-18 11:02:06