Почему я не могу получить доступ к телу OkHttp?

#android #retrofit #retrofit2 #okhttp

#Android #модернизация #retrofit2 #okhttp

Вопрос:

Я могу вывести I / okhttp.OkHttpClient: структура, как показано на рисунках, но я никак не могу получить к ней доступ. На эту тему было много тем, и было заявлено, что это решение response.body().string(); , но когда я пишу этот код, я получаю синтаксическую ошибку с. .string()

Вывод
Синтаксическая ошибка

 class RegisterPage : AppCompatActivity() {
val logging = HttpLoggingInterceptor()

override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    setContentView(R.layout.activity_register_page)
    button.setOnClickListener {
            val retrofit=
                    Retrofit.Builder().addConverterFactory(GsonConverterFactory.create()).client(getHttpClient()).baseUrl(Constants.BASE_URL).build()
            val jsonPlaceholderApi=retrofit.create(JsonPlaceholderApi::class.java)
            val userPost = Register(
                    name.text.toString(),
                    user.text.toString(),
                    pass.text.toString()
            )
            val call=jsonPlaceholderApi.sendRegister(userPost)

            call.enqueue(object : Callback<Void> {
                override fun onResponse(call: Call<Void>, response: Response<Void>) {
                    if(response.isSuccessful){
                        println("asd")
                    }else{
                        println(response.body())
                    }

                }

                override fun onFailure(call: Call<Void>, t: Throwable) {
                    println(t.printStackTrace())
                }

            })
        }
}
fun getHttpClient(): OkHttpClient {
   // logging.setLevel(HttpLoggingInterceptor.Level.BODY)
    logging.level = HttpLoggingInterceptor.Level.BODY


    return OkHttpClient.Builder()
        .connectTimeout(300, TimeUnit.SECONDS)
        .readTimeout(300, TimeUnit.SECONDS).addInterceptor(logging).build()
}
}
 

Комментарии:

1. Похоже, вы путаете интерфейсы обратного вызова Retrofit и OkHttp. Метод string() включает Response.body() из ответа OkHttp, а не модифицируется.

Ответ №1:

Это Kotlin. Я думаю, вы должны сделать это так:

 response.body()?.string()
 

Источник: https://medium.com/@rohan.s.jahagirdar/android-http-requests-in-kotlin-with-okhttp-5525f879b9e5

Комментарии:

1. я пытаюсь, но ничего не изменилось.

Ответ №2:

Ваш общий тип Response — это Void , вы должны изменить это на что-то вроде String , потому что тип Void диктует, что у него нет ответа.