Rxjava Single 안의 값 사용하기
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 값 사용