【问题标题】:Why I can't access OKHttp Body?为什么我无法访问 OKHttp 正文?
【发布时间】:2021-03-27 21:24:22
【问题描述】:

我可以输出I/okhttp.OkHttpClient: 图片中显示的结构,但我无法以任何方式访问它。关于这个主题有很多主题,据说这是response.body().string(); 的解决方案,但是当我编写此代码时,我收到.string()语法错误

Output Syntax-error

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()
}
}

【问题讨论】:

  • 您似乎混淆了 Retrofit 和 OkHttp 回调接口。来自 OkHttp 响应的 Response.body() 上的 string() 方法,而不是 Retrofit。

标签: android retrofit retrofit2 okhttp


【解决方案1】:

这是科特林。我认为你必须这样做:

response.body()?.string()

来源:https://medium.com/@rohan.s.jahagirdar/android-http-requests-in-kotlin-with-okhttp-5525f879b9e5

【讨论】:

  • 我尝试了,但没有任何改变。
【解决方案2】:

Response 的泛型类型是 Void,您应该将其更改为 String,因为 Void 类型表示它没有响应。

【讨论】:

    猜你喜欢
    • 2014-01-27
    • 2021-07-07
    • 2015-01-11
    • 2014-04-06
    • 1970-01-01
    • 1970-01-01
    • 2021-11-19
    • 1970-01-01
    • 2021-05-26
    相关资源
    最近更新 更多