When I use retrofit2, the app is just shut down

Viewed 43

I used retrofit2 to call API. But, when I called it, my app was just shut down. There are not errors in the Logcat. I googled it, but there is not a solution. And Retrofit2 and converter-gson version is 2.9.0. I set internet permission in AndroidManifest.xml

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.text.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>
}

Youtube Video

1 Answers

Try to add an interceptor so you can see all calls logs (headers, body, URLs, etc...). The crash could be related with the parse of the JSON response to the object Member.

Add OkHtpp to your grade dependencies:

implementation "com.squareup.okhttp3:okhttp:5.0.0-alpha.2"
implementation "com.squareup.okhttp3:logging-interceptor:5.0.0-alpha.2"

And after that, when you create your Retrofit instance, add the interceptor, should look something like this:

val httpClient = OkHttpClient.Builder()
val interceptor = HttpLoggingInterceptor()
interceptor.setLevel(HttpLoggingInterceptor.Level.BODY)
httpClient.addInterceptor(interceptor)
httpClient.addInterceptor(Interceptor { chain: Interceptor.Chain ->
   val original: Request = chain.request()
   val request: Request = original.newBuilder()
        .header("Content-Type", "application/json")
        .method(original.method, original.body)
        .build()
   chain.proceed(request)
})
      
val okHttpClient = httpClient.build()
val retrofit = Retrofit.Builder()
            .baseUrl(MemberAPI.base_domain)
            .client(okHttpClient)
            .addConverterFactory(GsonConverterFactory.create())
            .build()
Related