android - 使用 OkHttp 在 Kotlin 中发送和接收网络请求
问题描述
我正在使用下面的代码通过 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()
...
解决方案
使用 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
推荐阅读
- fortran - FFTW vsfourn 子程序结果不匹配
- javascript - 如何为d3.js中条形图中的每个条形分配不同的颜色
- wpf - WPF ListView CellTemplate 绑定
- java - Java 对与 HashMap
- javascript - 尝试淡入/淡出 html5 音频文件 vuejs / vanilla js
- html - 使用 CSS 和 Bootstrap 4 自定义边缘平滑的边框
- sql - 创建新列,所有内容都在另一列的第三和第四之间
- c++ - 来自 C++ 的 Angelscript 传输数组
- ruby - Ruby 地图给出了奇怪的结果
- c++ - 计算每个节点的树高,帮我解释一下这个代码解决方案