【问题标题】:Sending and Receiving Network Requests in Kotlin with OkHttp在 Kotlin 中使用 OkHttp 发送和接收网络请求
【发布时间】:2021-05-28 01:07:00
【问题描述】:

我正在使用下面的代码通过 OkHttp 发送和接收网络请求。 在得到响应之前如何知道请求是否发送成功? 例如,我想添加一个跟踪以了解请求已成功发送并且我现在正在等待响应。

val client = OkHttpClient()
val builder = FormBody.Builder()
val formBody = builder.build()
val request = Request.Builder()
      .url(url)
      .post(formBody)
      .build()
val response = client.newCall(request).execute()
val jsonDataString = response.body()?.string()
...

【问题讨论】:

    标签: android kotlin okhttp


    【解决方案1】:

    使用 EventListener API https://square.github.io/okhttp/events/

    #!/usr/bin/env kotlin
    
    @file:Repository("https://repo1.maven.org/maven2/")
    @file:DependsOn("com.squareup.okhttp3:okhttp:4.9.0")
    @file:CompilerOptions("-jvm-target", "1.8")
    
    import okhttp3.Call
    import okhttp3.EventListener
    import okhttp3.OkHttpClient
    import okhttp3.Request
    
    val client = OkHttpClient.Builder()
      .eventListener(object : EventListener() {
        override fun requestBodyEnd(call: Call, byteCount: Long) {
          println("requestBodyEnd: $call")
        }
    
        override fun responseHeadersStart(call: Call) {
          println("responseHeadersStart: $call")
        }
      })
      .build()
    
    val request = Request.Builder()
      .url("https://httpbin.org/get")
      .build()
    
    val body = client.newCall(request).execute().use {
      it.body!!.string()
    }
    
    println(body)
    

    示例代码(Intellij 的 Kotlin 脚本) - 名称 example.main.kts

    【讨论】:

      猜你喜欢
      • 2017-06-09
      • 2014-06-05
      • 1970-01-01
      • 1970-01-01
      • 2016-05-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多