본문 바로가기
Android/메모

[Android] RxJava3, Retrofit 사용 시 RxJava3CallAdapterFactory 추가

by ESHC 2022. 9. 19.

RxJava3와 Retrofit을 함께 사용하여 서버와 데이터를 주고 받아야 할 때

Retrofit을 Build할 때  RxJava3CallAdapterFactory를 추가해야한다.

 

private val retrofit = Retrofit.Builder()
        .client(client)
        .baseUrl("https://api.github.com")
        .addConverterFactory(GsonConverterFactory.create(gson))
        .addCallAdapterFactory(RxJava3CallAdapterFactory.create())
        .build()

 

우선 CallAdapter는 Call<R>을 T 타입으로 변환해주는 인터페이스이다. 

CallAdapter.Factory를 통해 CallAdapter 인스턴스를 생성할 수 있다.

 

여기서 Call타입은 Retrofit메서드의 API 호출 이후 응답을 반환하는 타입이고 Adapter를 통해 T타입으로 변환을 할 수 있다. 

 

직접 CallAdapter를 구현할 수 있지만 RxJava를 위한 RxJava3CallAdapter 인스턴스를 생성할 수 있는 RxJava3CallAdapterFactory가 Retrofit 라이브러리에 제공이 되기 때문에 RxJava3CallAdapterFactory을 CallAdapterFactory로 추가하여 원하는 리턴타입을 지정하여 사용할 수 있다.

 

 

 

 

참고 : https://medium.com/shdev/retrofit%EC%97%90-calladapter%EB%A5%BC-%EC%A0%81%EC%9A%A9%ED%95%98%EB%8A%94-%EB%B2%95-853652179b5b

 

Retrofit에 CallAdapter를 적용하는 법

개요

medium.com

https://square.github.io/retrofit/2.x/retrofit/retrofit2/Call.html

 

Call (Retrofit 2.7.1 API)

An invocation of a Retrofit method that sends a request to a webserver and returns a response. Each call yields its own HTTP request and response pair. Use clone() to make multiple calls with the same parameters to the same webserver; this may be used to i

square.github.io

 

댓글