post-custom-banner

API를 이용하다보면 에러시 응답코드와 설명을 주는 경우가 있다. API를 만들때 모든 백엔드가 고려하는 상황이며 API를 사용하는 사람은 어디서 어떤 이유때문에 에러가 발생했는지 알 수 있어야한다.

  1. Errorcode와 Description이 있다고 가정하고 시작하자. 먼저 데이터 클래스를 만든다.
data class ErrorResponse(
    val code : String?,
    val description : String?
)
  1. Error에 대한 응답을 Json 파싱하자.

파싱이란?
다른 형식으로 저장된 데이터를 원하는 형식의 데이터로 변환하는 것을 의미한다
JSON 파싱이란 JSON형식의 문자열을 객체로 변환하는 것이다.

fun showErrorLog(response : ResponseBody?){
    val errorMessage = Jsons.gson().fromJson(response?.string(), ErrorResponse::class.java)
    Log.e("ERROR","${errorMessage.description}")
    Log.e("ERROR","${errorMessage.code}")
}

gson을 이용하여 생성자로 받은 ResponseBody값인 response를 ErrorResponse에 매칭하여 변환하는 과정이다. 이때 주의해야 할 점은 string()대신 toString()을 사용하면 다음과 같은 에러가 발생한다.

Expected BEGIN_OBJECT but was STRING at line 1 column 1 path $
  1. 다음 함수를 실행시킨다.
//코루틴을 사용하였다. 카카오 로그인을 예시로 정했다.
private suspend fun loginWithKakao() {
        UserApiClient.instance.me { user, error ->
            if (error != null) {
                Log.e("ERROR", "유저 정보를 받지 못했습니다.")
                Log.e("ERROR", "${error.message}.")
                Log.e("ERROR", "${error.localizedMessage}.")
            } else {
                launch {
                    val response =
                        service.getKaKaoInfo(
                            Constants.Kakao.lowercase(),
                            user?.id.toString(),
                            user?.kakaoAccount?.profile?.nickname,
                            user?.kakaoAccount?.profile?.profileImageUrl
                        )
                    if (!response.isSuccessful) {
                        showErrorLog(response.errorBody())
                    } else {
												//응답이 제대로 왔을 경우 실행시킬 구문
                    }
                    dismiss()
                }
            }
        }
    }

단계는 짧고 쉬워보이지만 처음 하게 된다면 당황할 수 있다. 특히 네트워킹에는 코린이에게는 너무 많은 에러가 도사리고 있으므로 기록해둔다!

누군가에게 도움이 되길

profile
러닝커브를 따라서 등반중입니다.
post-custom-banner

0개의 댓글