Retrofit을 사용하여 네트워크 요청을 처리하는 방법에는 크게 두 가지가 있다!
코루틴을 사용하는 방법과 enqueue를 사용하는 방법..!
앞에서 Retrofit2 사용법을 썼기 때문에 중복되는 부분은 생략하고 쓰겠다!
fun 앞에 suspend 붙여주기!!(항상 까먹음)
Call<>이 아닌 Response<>로!!
@PATCH("/myprofiles/{profile-id}")
suspend fun patchProfile(@Path(value = "profile-id") profile_id : Long, @Body patchData: RequestPatchProfile) : Response<PatchMyprofile>
코루틴을 이용했기 때문에 앞에서 정리한 것과는 형식이 다름
//요청 바디에 들어갈 데이터
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오류가 났었는데 변수명을 서버랑 다르게 입력해서 났던 오류였다..!! 항상 변수명 잘 체크하자!!!
⭕️ 글구,, 로그를 알맞은 곳에서 잘 띄워서 오류가 난 부분 확인하고 오류메세지 확인하는거 진짜 도움 많이 되는걸 계속 느낀다.. 그러니깐 애용하잡!