Android
rxjava2
aucd29
2017. 9. 14. 09:13
https://github.com/ReactiveX/RxJava
https://github.com/amitshekhariitbhu/RxJava2-Android-Samples
https://medium.com/rainist-engineering/migrate-from-rxjava1-to-rxjava2-3aea3ff9051c
https://github.com/MindorksOpenSource/android-mvp-architecture
https://brunch.co.kr/@lonnie/17
map: 전달 받은 observable 를 새로운 형태의 observable 로 변경 (가령 a 클래스에서 b 클래스로 변경한다 던가)
source 생성
Observable<Integer> src = Obserable.create(ssb -> {
try {
for (int i=0; i<5; ++i) { ssb -> onNext(i); }
ssb.onCompleted();
} catch (Exception e) {
ssb.onError(e);
}
});
소스 구독
src.subscribe(
i -> Log.d(TAG, "NEXT: " + i);
e -> Log.e(TAG, "ERROR: " + e.getMessage()),
() -> Log.d(TAG, "COMPLETED"));
결과
NEXT: 0
NEXT: 1
NEXT: 2
NEXT: 3
NEXT: 4
COMPLETED
====
지연 생성
Observable<Integer> src = Obserable.create(() -> return Observable.just(0));
src.delaySubscription(1, TimeUnit.SECONDS).subscribe(
i -> Log.d(TAG, "NEXT: " + i),
e -> Log.e(TAG, "ERROR: " + e.getMessage()),
() -> Log.d(TAG, "COMPLETED");
);
src 를 또 구독하면 앞서 생성된 코드와 별도로 생성 됨 즉 같은 데이터로 다른 시간을 주고 2번 호출할 수 있게 됨
src.delaySubscription(5, TimeUnit.SECONDS).subscribe(
i -> Log.d(TAG, "NEXT: " + i),
e -> Log.e(TAG, "ERROR: " + e.getMessage()),
() -> Log.d(TAG, "COMPLETED")
);
이밖에 아래와 같은게 있음
Observable<Integer> src = Observable.fromCallable(() -> "Hello");
Observable<Integer> src = Observable.interval(1, TimeUnit.SECONDS);
src.take(3).subscribe(
i -> Log.d(TAG, "NEXT: " + i),
e -> Log.e(TAG, "ERROR: " + e.getMessage()),
() -> Log.d(TAG, "COMPLETED")
);
Observable<Integer> src = Observable.range(1, 3);
Observable<Integer> src = Observable.just(0).repeat(3);
Observable<Integer> src = Observable.timer(3, TimeUnit.SECONDS);
Observable<Integer> src = Observable.from(Lists.newArrayList(0, 1, 2, 3, 4);
Observable<Integer> src = Observable.empty(); // 애는 complete 를 호출 함 0과 같다고 할까나
Observable<Integer> src = Observable.never(); // 애는 complete 를 호출 하지 않음 null 과 같다고 할까나
Observable<Integer> src = Observable.merge(); // 두개 이상의 Observable 를 합친다.
https://github.com/amitshekhariitbhu/RxJava2-Android-Samples
https://medium.com/rainist-engineering/migrate-from-rxjava1-to-rxjava2-3aea3ff9051c
https://github.com/MindorksOpenSource/android-mvp-architecture
https://brunch.co.kr/@lonnie/17
map: 전달 받은 observable 를 새로운 형태의 observable 로 변경 (가령 a 클래스에서 b 클래스로 변경한다 던가)
source 생성
Observable<Integer> src = Obserable.create(ssb -> {
try {
for (int i=0; i<5; ++i) { ssb -> onNext(i); }
ssb.onCompleted();
} catch (Exception e) {
ssb.onError(e);
}
});
소스 구독
src.subscribe(
i -> Log.d(TAG, "NEXT: " + i);
e -> Log.e(TAG, "ERROR: " + e.getMessage()),
() -> Log.d(TAG, "COMPLETED"));
결과
NEXT: 0
NEXT: 1
NEXT: 2
NEXT: 3
NEXT: 4
COMPLETED
====
지연 생성
Observable<Integer> src = Obserable.create(() -> return Observable.just(0));
src.delaySubscription(1, TimeUnit.SECONDS).subscribe(
i -> Log.d(TAG, "NEXT: " + i),
e -> Log.e(TAG, "ERROR: " + e.getMessage()),
() -> Log.d(TAG, "COMPLETED");
);
src 를 또 구독하면 앞서 생성된 코드와 별도로 생성 됨 즉 같은 데이터로 다른 시간을 주고 2번 호출할 수 있게 됨
src.delaySubscription(5, TimeUnit.SECONDS).subscribe(
i -> Log.d(TAG, "NEXT: " + i),
e -> Log.e(TAG, "ERROR: " + e.getMessage()),
() -> Log.d(TAG, "COMPLETED")
);
이밖에 아래와 같은게 있음
Observable<Integer> src = Observable.fromCallable(() -> "Hello");
Observable<Integer> src = Observable.interval(1, TimeUnit.SECONDS);
src.take(3).subscribe(
i -> Log.d(TAG, "NEXT: " + i),
e -> Log.e(TAG, "ERROR: " + e.getMessage()),
() -> Log.d(TAG, "COMPLETED")
);
Observable<Integer> src = Observable.range(1, 3);
Observable<Integer> src = Observable.just(0).repeat(3);
Observable<Integer> src = Observable.timer(3, TimeUnit.SECONDS);
Observable<Integer> src = Observable.from(Lists.newArrayList(0, 1, 2, 3, 4);
Observable<Integer> src = Observable.empty(); // 애는 complete 를 호출 함 0과 같다고 할까나
Observable<Integer> src = Observable.never(); // 애는 complete 를 호출 하지 않음 null 과 같다고 할까나
Observable<Integer> src = Observable.merge(); // 두개 이상의 Observable 를 합친다.