*/Android

[안드로이드] 서버 통신 시 예외 처리가 제대로 안 될 때

sssbin 2023. 3. 9. 23:11

 

안드로이드에서 예외 처리를 해주지 않으면 애플리케이션이 죽어버리기 때문에 예외 처리는 꼭 해줘야 한다.

근데 자꾸 응답 코드는 실패로 들어오는데, response가 성공으로 처리되어서 한 시간동안 헤맸다...

 

▼ 처음 코드

class PostNewClubService(val newClubInterface: PostNewClubInterface){
    private val retrofit: GroupRetrofit = ApplicationClass.sRetrofit.create(GroupRetrofit::class.java)

    fun tryPostNewClub(clubInfo: GroupNewRequest){
        retrofit.postNewClubReq(clubInfo).enqueue(object : Callback<BaseResponse>{
            override fun onResponse(call: Call<BaseResponse>, response: Response<BaseResponse>) {
                if(response.isSuccessful){ // response.code() == 200
                    newClubInterface.onPostNewClubSuccess()
                } else {
                    newClubInterface.onPostNewClubFailure(response.message())
                }
            }

            override fun onFailure(call: Call<BaseResponse>, t: Throwable) {
                Log.d("postNewClubReq", "failure")
                t.printStackTrace()
                newClubInterface.onPostNewClubFailure(t.message ?: "통신 오류")
            }
        })
    }
}

 

여기저기 열심히 로그도 찍어보고 스웨거도 계속 보고 하다가 원인을 발견했다.

통신 자체는 성공적이어서 response는 성공으로 처리되고, body가 실패로 처리된다는 것!!!

 

▼ 고친 코드

class PostNewClubService(val newClubInterface: PostNewClubInterface){
    private val retrofit: GroupRetrofit = ApplicationClass.sRetrofit.create(GroupRetrofit::class.java)

    fun tryPostNewClub(clubInfo: GroupNewRequest){
        retrofit.postNewClubReq(clubInfo).enqueue(object : Callback<BaseResponse>{
            override fun onResponse(call: Call<BaseResponse>, response: Response<BaseResponse>) {
                if(response.isSuccessful){
                    if (response.body()?.isSuccess == true) {
                        newClubInterface.onPostNewClubSuccess()
                    } else {
                        newClubInterface.onPostNewClubFailure(response.body()?.message.toString())
                    }
                } else {
                    newClubInterface.onPostNewClubFailure(response.message())
                }
            }

            override fun onFailure(call: Call<BaseResponse>, t: Throwable) {
                Log.d("postNewClubReq", "failure")
                t.printStackTrace()
                newClubInterface.onPostNewClubFailure(t.message ?: "통신 오류")
            }
        })
    }
}

 

이렇게 하면 해결된다!

이제 메인 코드에서 예외 처리 해주면 된다. 😊