ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Single, Maybe, Completable
    개발/안드로이드 2021. 7. 4. 17:59

    RxJava2 들어오면서 Single, Maybe, Completable Observable이 추가됐다. 개발 할 때는 Single만 사용했었는데 이번 포스트에서 자주 쓰지 않은 Maybe, Completable에 대해서 배워보고 앞으로 용도에 맞춰서 사용해보려고 한다.

     

    Single 

     

    단일의 데이터 보내거나 에러를 내는 Observable이다. 주로 서버로부터 http 데이터를 받아올 때 사용한다. 아래 처럼 단일 데이터 객체인 Post를 받아오는 api를 사용한다면 Single로 Observable을 받고 doOnSuccess에서 받아온 데이터를 열어 볼 수 있다. 에러인 경우에는 doOnError를 실행한다

     

    interface RxApi {
        @GET("api/v1/post")
        fun getPost(@Query("postId") postId: Long): Single<Post>
    }
    
    apiClient.getPost(postId)
        .doOnSuccess { post ->
            Log.d("rxtest", "post: ${post.postId}")
        }
        .doonError { }
        .subscribe()

     

    Maybe 

     

    Single처럼 단일의 데이터를 보내는데 빈 값을 보낼 수 있다는 점이 다르다. 서버에서 데이터를 읽는데 너무 오랜 시간이 걸리는 경우나 종종 빈 값을 내려줘야 하는 경우 요긴하게 쓸 수 있다. 빈 값이 내려오는 경우에는 doOnError 가 호출된다.

     

    Maybe.empty<Int>()
        .doOnSuccess {
            Log.d("rxjava test", "printed: $it")
        }
        .doOnError { throwable ->
            Log.d("rxjava test", throwable.localizedMessage?: "")
        }
        .subscribe()

     

    Completable 

     

    함수의 리턴 값은 관심 없고 완료의 유무만 확인하고 싶을 때 사용하는 Observable이다. 서버에 객체를 업데이트하는 요청을 보낸 경우나 로깅용도로 사용하는 경우가 이런 경우에 적합하다.

     

    interface RxApi {
        @POST("api/v1/log")
        fun logEvent(@Body param: String): Completable
    }
    
    apiClient.logEvent("this is blog post")
        .doOnComplete {
            Log.d("rxjava test", "finished time: ${System.currentTimeMillis()}")
        }
        .subscribe()

    '개발 > 안드로이드' 카테고리의 다른 글

    Coroutine + Retrofit | Coroutine + Room  (0) 2021.07.22
    suspend fun  (0) 2021.07.22
    Single, Maybe, Completable  (0) 2021.07.04
    Serializable 과 Parcelable  (0) 2021.06.19
    kotlin lateinit, lazy by  (0) 2021.06.05
    Kotlin - Coroutine  (0) 2021.05.21

    댓글 0

Designed by Tistory.