본문 바로가기

Kotlin/안드로이드 공부

Rxjava Single 안의 값 사용하기

728x90

1. flatMap() / flatMapCompletable()

-> 각각 Single, Completable 형태로 반환하며, it 으로 Single, Completable 안의 값 사용가능

 

2. subscribe()

-> Disposable 형태로 반환

 

3. blockingGet()

이름 그대로 현재 쓰레드를 blocking 시킨다.

따라서 완전한 동기 코드와 사용해야하며,observeOn(MainThread) 같이 UI 쓰레드를 사용하는 코드와는 절대 같이 사용하면 안됨!


<현재>

fun getInfo(): Info {

 

1. DB 에서 info 값을 가져온다. -> return Info or nullPointerException

2. 이때 DB에 값이 존재하지 않아 nullPointerException 에러가 발생하면,

onErrorResumeNext() 에서 Repository 의 함수를 통해 info 값을 가져온다. -> return Single<Info>

 

-> 1번과 2번의 리턴 타입을 통일시켜주기 위해서 1번 동작은 Single.fromCallable() 에서 실행한다.

-> Single<Info>

-> blockingGet() 을 통해 Single<Info> -> Info 으로 바꾸어 리턴한다.

 

}

 

액티비티에서는 함수를 호출하여 리턴값( Info )을 그대로 사용한다.


<변경>

fun getInfo(): Single<Info>{

 

나머지는 위와 동일하지만 blockingGet() 을 호출하지 않고 Single<Info> 타입으로 그대로 반환한다.

 

}

함수를 사용하는 곳에서 subscribe() 호출하여 Info 값 사용