Retrofit2 사용법_코루틴 이용

쿵ㅇ양·2024년 2월 3일
0

Android

목록 보기
1/30

Retrofit을 사용하여 네트워크 요청을 처리하는 방법에는 크게 두 가지가 있다!
코루틴을 사용하는 방법과 enqueue를 사용하는 방법..!

앞에서 Retrofit2 사용법을 썼기 때문에 중복되는 부분은 생략하고 쓰겠다!

1. retrofit 인터페이스

fun 앞에 suspend 붙여주기!!(항상 까먹음)
Call<>이 아닌 Response<>로!!

@PATCH("/myprofiles/{profile-id}")
    suspend fun patchProfile(@Path(value = "profile-id") profile_id : Long, @Body patchData: RequestPatchProfile) : Response<PatchMyprofile>

2. api를 호출할때

코루틴을 이용했기 때문에 앞에서 정리한 것과는 형식이 다름

//요청 바디에 들어갈 데이터
val patchData = RequestPatchProfile(129, "mbti", "intj")

//CoroutineScope의 lifecycleScope를 사용하여 백그라운드에서 실행될 코루틴 블록을 정의
        lifecycleScope.launch {
            try {
     // 백그라운드 스레드에서 Retrofit의 patchProfile 메서드를 호출하고, 결과를 받아옴
     // withContext를 사용하여 백그라운드 스레드에서 실행하도록 함
                val response: Response<PatchMyprofile> = withContext(Dispatchers.IO) {
                    retrofitClient.patchProfile(19, patchData)
                }

                if (response.isSuccessful) {
                    
                    // 성공한 응답 데이터를 받아옴
                    val responseData: PatchMyprofile? = response.body()
                    Log.d("patch 성공", "응답 데이터: $responseData")
                    // responseData를 처리하는 로직 작성
                } else {
                    val errorBody = response.errorBody()?.string() ?: "No error body"
                    Log.e("patch 요청 실패", "응답코드: ${response.code()}, 응답메시지: ${response.message()}, 오류 내용: $errorBody")

                }
            } catch (e: Exception) {
                Log.e("patch 요청 실패", "에러: ${e.message}")
            }
        }

이 코드를 보면 코루틴을 쓰는게 훨씬 간결하고 효율적인 것을 볼 수 있다..
아직은 둘에 대해서 잘 모르겠어서.. 둘다 써보면서 직접 느껴야겠다..!

❗️패치를 호출할때 500오류가 났었는데 변수명을 서버랑 다르게 입력해서 났던 오류였다..!! 항상 변수명 잘 체크하자!!!

⭕️ 글구,, 로그를 알맞은 곳에서 잘 띄워서 오류가 난 부분 확인하고 오류메세지 확인하는거 진짜 도움 많이 되는걸 계속 느낀다.. 그러니깐 애용하잡!

profile
개발을 공부하고 있는 대학생

0개의 댓글

관련 채용 정보