Android Retrofit + Rxjava

passΒ·2023λ…„ 8μ›” 7일
0

Android

λͺ©λ‘ 보기
26/41

πŸ”₯ Rxjava와 ν•¨κ»˜ Retrofit κ΅¬ν˜„ν•˜κΈ°

Retrofit 은 자체적으둜 λ°±κ·ΈλΌμš΄λ“œμ—μ„œ Thread Β λ₯Ό μ‹€ν–‰ν•˜κ³  Callback 을 톡해 메인 Thread μ—μ„œ UI μ—…λ°μ΄νŠΈκ°€ κ°€λŠ₯ν•˜λ‹€.
이 λ•Œ 주둜 Call interface 의 enqueue λ©”μ†Œλ“œλ₯Ό ν†΅ν•˜μ—¬ λΉ„λ™κΈ°μ μœΌλ‘œ API 톡신을 μ§„ν–‰ν•˜κ³ , onResponse 와 onFailue 둜 톡신 κ²°κ³Όλ₯Ό λ°›λŠ”λ‹€.

Rxjava 와 Retrofit 을 같이 μ‚¬μš©ν•  κ²½μš°μ—λŠ” 비동기 Thread λ₯Ό Rxjava μ—μ„œ μ‚¬μš©ν•˜κΈ° λ•Œλ¬Έμ— ꡬ독을 톡해 μ§„ν–‰ν•œλ‹€.
Rxjava 와 Retrofit 을 같이 μ‚¬μš©ν•˜λ©΄ μΌκ΄€λœ 비동기 μž‘μ—… 관리λ₯Ό ν•  수 있고, λ³΅μž‘ν•œ 비동기 μž‘μ—…μ„ 보닀 μ‰½κ²Œ κ΅¬ν˜„ν•  수 μžˆλ‹€λŠ” μž₯점이 μžˆλ‹€. ν•˜μ§€λ§Œ, κ°„λ‹¨ν•œ μ–΄ν”Œλ¦¬μΌ€μ΄μ…˜μΈ κ²½μš°μ—λŠ” Rxjava λ₯Ό 같이 μ‚¬μš©ν•  ν•„μš”λŠ” μ—†μœΌλ―€λ‘œ 개발 상황과 ν”„λ‘œμ νŠΈμ— 맞게 μ‚¬μš©ν•˜λ©΄ λœλ‹€.

μ•„λž˜ 예제λ₯Ό 톡해 Rxjava 와 Retrofit 을 μ‚¬μš©ν•˜λŠ” 방법을 μ•Œμ•„λ³΄μž.


βœ“ build.gradle

dependencies {
	...
	implementation 'io.reactivex.rxjava3:rxandroid:3.0.2'
    implementation 'io.reactivex.rxjava3:rxjava:3.1.5'

    implementation 'com.squareup.retrofit2:retrofit:2.9.0'
    implementation 'com.squareup.retrofit2:converter-gson:2.9.0' // JSON 데이터 처리λ₯Ό μœ„ν•œ Gson 컨버터
    implementation 'com.squareup.retrofit2:adapter-rxjava3:2.9.0'  // RxJava 3 μ–΄λŒ‘ν„° μΆ”κ°€
}

βœ“ TestRequest.java

public class TestRequest {
	private String name;
    private String time;
    
    public TestRequest (String name, String time) {
		this.name = name;
        this.time = time;
	}
}
  • API μš”μ²­ μ‹œ 전달받을 data class

βœ“ TestApi.java

public interface TestApi {
    @POST("/test")
    Observable<ResponseBody> getTest(@Body NotificationRequest request);

    @POST("/testSingle")
    Single<String> getTestSingle();
}
  • μ„œλ²„ μš”μ²­ μ£Όμ†Œμ™€ νŒŒλΌλ―Έν„°λ₯Ό ν¬ν•¨ν•˜μ—¬ ν΄λΌμ΄μ–ΈνŠΈμ—μ„œ μ‚¬μš©ν•  ν•¨μˆ˜ μ„ μ–Έ

βœ“ μ‚¬μš©

// Retrofit
Retrofit retrofit = new Retrofit.Builder()
		.baseUrl("μ„œλ²„ URL")
        .addConverterFactory(GsonConverterFactory.create())
        .addCallAdapterFactory(RxJava3CallAdapterFactory.create())
        .build();

TestApi testApi = retrofit.create(TestApi.class);

// RxJava - Observable
testApi.getTest(request)
		.subscribeOn(Schedulers.io())
        .observeOn(AndroidSchedulers.mainThread())
        .subscribe(new Observer<ResponseBody>() {
    	    	@Override
	    	    public void onSubscribe(@io.reactivex.rxjava3.annotations.NonNull Disposable d) {
                        // ꡬ독 μ‹œ μ²˜λ¦¬ν•  λ‚΄μš©
                }

				@Override
                public void onNext(@io.reactivex.rxjava3.annotations.NonNull ResponseBody responseBody) {
                        // κ²°κ³Ό 데이터 처리
                }

				@Override
                public void onError(@io.reactivex.rxjava3.annotations.NonNull Throwable e) {
                		// μ—λŸ¬ 처리
                }

				@Override
                public void onComplete() {
                        // μž‘μ—… μ™„λ£Œ 처리
                    }
                });
                
// Rxjava - Single
testApi.getTestSingle()
		.subscribeOn(Schedulers.io())
        .observeOn(AndroidSchedulers.mainThread())
        .subscribe(new SingleObserver<>() {
        		@Override
                public void onSubscribe(@NonNull Disposable d) {
                	// ꡬ독 μ‹œ μ²˜λ¦¬ν•  λ‚΄μš©
                }

				@Override
                public void onSuccess(@NonNull String s) {
					// 성곡
                }

				@Override
                public void onError(@NonNull Throwable e) {
                	// 였λ₯˜
                }
        });
 
  • 이벀트λ₯Ό λ°œμƒμ‹œν‚€λŠ” 주체인 Observable κ³Ό ν•˜λ‚˜μ˜ λ°μ΄ν„°λ§Œμ„ λ°œμƒμ‹œν‚€λŠ” Single 의 μ˜ˆμ‹œ μ½”λ“œμ΄λ‹€.
  • 이외에도 Flowable λ“±μ˜ νƒ€μž…μ΄ μžˆλŠ”λ°, 상황에 λ§žλŠ” νƒ€μž…μ„ μ μš©μ‹œν‚€λ©΄ λœλ‹€.
profile
μ•ˆλ“œλ‘œμ΄λ“œ 개발자 지망생

0개의 λŒ“κΈ€