관리 메뉴

나만을 위한 블로그

[Android] Rxjava와 Retrofit 같이 사용하는 법 본문

Android

[Android] Rxjava와 Retrofit 같이 사용하는 법

참깨빵위에참깨빵 2021. 8. 4. 20:45
728x90
반응형

Rxjava는 자바에서 비동기 처리와 반응형 프로그래밍을 할 수 있도록 Reactive Extension을 JVM에서 구현한 라이브러리다.

자바 라이브러리기 때문에 안드로이드 앱을 만들 때도 사용할 수 있는데, 인터페이스에 선언하는 추상 메서드부터 어떻게 작성하는지 확인해보자.

사용된 코드는 아래 포스팅에 작성했던 걸 가져왔다.

https://onlyfor-me-blog.tistory.com/358

 

[Android] 레트로핏으로 네이버 검색 API 사용하는 법

네이버 검색 API를 사용할 일이 생겨서 찾아보는데, 자바 언어로 레트로핏을 사용해 가져오는 예제가 보이질 않았다. 비슷한 API를 코틀린으로 작성한 건 있었는데, 이걸 보면서 자바로 바꿔봤더

onlyfor-me-blog.tistory.com

@GET("search/{type}")
    Single<String> getRxjavaResult(
            @Header("X-Naver-Client-Id") String id,
            @Header("X-Naver-Client-Secret") String pw,
            @Path("type") String type,
            @Query("query") String query
    );

 

네이버 책 검색 API를 사용하기 위한 메서드를 위와 같이 바꿨다.

보통 Call<String> 형태나 Call<Model Class> 형태로 쓰는데 Single을 사용한 걸 볼 수 있다.

 

Single이란 Rxjava에서 통지할 데이터가 반드시 1건이라도 있을 때 이를 통지하거나 에러를 통지하는 데 사용하는 클래스다. 흔히 사용되는 Observable, Flowable처럼 데이터 통지와 완료가 나눠져 있지 않고, 데이터 통지 자체가 완료를 의미하거나 데이터 통지 없이 완료만 통지한다. 메서드가 호출되면 Single의 생명주기는 끝나고 구독도 종료되는 건 덤이다.

그런데 만든 것까진 좋은데 실제 사용은 어떻게 하나? 메인 액티비티에서 메서드를 만들 때 이렇게 하면 된다.

@SuppressLint("CheckResult")
    private void getRxjavaResult()
    {
        // 레트로핏 객체를 초기화하는 메서드 호출 후 레트로핏 추상 메서드 호출
        ApiClient.getInstance().create(ApiInterface.class)
                .getRxjavaResult(client_id, client_pw, "book.json", "안드로이드")
                .subscribeOn(Schedulers.io())
                .observeOn(AndroidSchedulers.mainThread())
                .subscribe(data -> parseResult(data));
    }

 

@SuppressLint는 Rxjava 적용 부분에서 노란 부분을 없애기 위해 넣은 어노테이션이니 무시해도 상관없다.

parseResult()는 서버 통신의 결과로 JSON 값이 넘어오는데 이를 파싱하기 위한 메서드니 이것도 무시해도 된다.

ApiClient의 getInstance()는 레트로핏 객체를 리턴해주는 메서드인데, 이걸 통해 ApiInterface에 정의된 엔드 포인트에 접근할 수 있게 한다.

그리고 인터페이스에 만들어둔 대로 메서드를 호출한 뒤 매개변수를 알맞게 넣어주고 생산자가 처리 작업을 실행하는 쓰레드의 종류를 설정하는 subscribeOn(), 데이터를 받는 쪽이 쓰레드 종류를 설정할 수 있게 observeOn()를 각각 호출하고 매개변수를 적절하게 넣어준다.

마지막으로 subscribe()에서 발행된 데이터를 받아서 JSON을 파싱해주는 메서드에 넣는 흐름이다.

그 외 파싱을 끝낸 데이터들을 리사이클러뷰에 붙여주는 처리를 하거나 이런저런 잡다한 처리까지 해주면 Rxjava와 레트로핏을 같이 사용한 예제가 완성된다.

반응형
Comments