마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

레트로핏 사용해서 오픈api 호출하면 앱이 그냥 꺼집니다.

0 추천

레트로핏 사용해서 오픈 api 호출하면 앱이 그냥 꺼집니다. 인터넷과 책에서 하라는 대로 다 했습니다. 인터넷 권한도 설정했습니다. 버전은 2.9.0이고 어떤 에러도 뜨지 않습니다.

MainActivity.kt

private fun loadMembers() {
        val retrofit = Retrofit.Builder()
            .baseUrl(MemberAPI.base_domain)
            .addConverterFactory(GsonConverterFactory.create())
            .build()

        val retrofitService = retrofit.create(MemberInterface::class.java)

        retrofitService
            .getMember(Constants.api_key)
            .enqueue(object: Callback<Member> {
                override fun onResponse(call: Call<Member>, response: Response<Member>) {
                    val members = response.body() as Member
                    var names = ""
                    for (member in members.response.body.items.item) {
                        names += "\n${member.empNm}"
                    }
                    binding.textView.text = names
                }

                override fun onFailure(call: Call<Member>, t: Throwable) {
                    Toast.makeText(baseContext, "실패", Toast.LENGTH_LONG).show()
                }

            })
    }

Interface.kt

interface MemberInterface {
    @GET("{api_key}&numOfRows=5&pageNo=1&_type=json")
    fun getMember(@Path("api_key") Key: String): Call<Member>
}

https://youtube.com/shorts/CzdG7FluviQ?feature=share

 화면 녹화한 유튜브 링크입니다.

muheonkom567118 (150 포인트) 님이 9월 18일 질문

1개의 답변

0 추천
 
채택된 답변
에러로그가 없으면 뭐가 문제인지 알기가 힘들기 때문에 문제 해결을 위해서는 먼저 에러로그를 확보하셔야 합니다. Retrofit의 경우는 Okhttp를 통해 네트워크 로깅을 설정하기 때문에 아래 링크를 보시고 로깅을 설정하신 다음에 에러 메세지를 먼저 확인해 보시기 바랍니다.

https://www.youtube.com/watch?v=R2c5Pv5cXc0

 그리고 코틀린을 사용할 경우는 Retrofit을 콜백과 함께 사용할 이유가 없어 보입니다. 코루틴을 이용해서 처리하는게 여러모로 도움이 됩니다.

https://blog.mindorks.com/using-retrofit-with-kotlin-coroutines-in-android

그리고 좀 더 정확하고 깔끔하게 API처리를 하길 원한다면 엄재웅님이 만든 라이브러리를 보고 어떻게 처리하는지 확인해 보는 것 도 도움이 많이 됩니다.
https://github.com/skydoves/sandwich
spark (172,410 포인트) 님이 9월 18일 답변
muheonkom567118님이 9월 24일 채택됨
추가로, 응답 데이터의 구조가 희한해 보입니다. 좀 보기 힘든 API 응답 구조네요. Member클래스의 구조가 맞게 디자인 된 건지 궁금하네요.

members.response.body

Request, Response는 샘플 JSON을 가져다가 안드로이드 스튜디오의 플러그인을 통해 클래스를 자동으로 생성하는게 쉽습니다.
...