일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- Rxjava Observable
- jvm 작동 원리
- 자바 다형성
- ar vr 차이
- 서비스 쓰레드 차이
- 스택 큐 차이
- 안드로이드 라이선스
- android ar 개발
- 플러터 설치 2022
- 안드로이드 유닛테스트란
- 2022 플러터 설치
- 스택 자바 코드
- 안드로이드 유닛 테스트 예시
- 서비스 vs 쓰레드
- 2022 플러터 안드로이드 스튜디오
- 안드로이드 레트로핏 crud
- jvm이란
- rxjava cold observable
- rxjava hot observable
- rxjava disposable
- ANR이란
- 멤버변수
- android retrofit login
- 객체
- 클래스
- 안드로이드 유닛 테스트
- 큐 자바 코드
- 안드로이드 os 구조
- 안드로이드 레트로핏 사용법
- 안드로이드 라이선스 종류
- Today
- Total
나만을 위한 블로그
[Android] Rxjava와 Retrofit 같이 사용하는 법 본문
Rxjava는 자바에서 비동기 처리와 반응형 프로그래밍을 할 수 있도록 Reactive Extension을 JVM에서 구현한 라이브러리다.
자바 라이브러리기 때문에 안드로이드 앱을 만들 때도 사용할 수 있는데, 인터페이스에 선언하는 추상 메서드부터 어떻게 작성하는지 확인해보자.
사용된 코드는 아래 포스팅에 작성했던 걸 가져왔다.
https://onlyfor-me-blog.tistory.com/358
@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와 레트로핏을 같이 사용한 예제가 완성된다.
'Android' 카테고리의 다른 글
[Android] LiveData의 postValue() vs setValue() (0) | 2021.09.10 |
---|---|
[Android] 리사이클러뷰 스크롤 중 데이터가 변경될 때 현재 위치를 유지하는 방법 (0) | 2021.08.12 |
[Android] 레트로핏 사용 시 Expected a string but was BEGIN_OBJECT at line 1 column 2 path $ 에러 해결 (0) | 2021.08.04 |
[Android] 레트로핏으로 네이버 검색 API 사용하는 법 (0) | 2021.08.04 |
[Android] Duplicate class android.support.v4.app.INotificationSideChannel 에러 해결 (0) | 2021.08.04 |