如何在 Kotlin 中全局访问 POST 响应?
How can I access a POST response globally in Kotlin?
我有一个从服务器获取令牌的 kotlin 脚本。然后它使用该令牌执行另一个请求。但是,我似乎无法在下一个请求中使用该令牌,因为该令牌具有本地范围。
这是我的代码:
class requests{
private val client = OkHttpClient()
private val coroutineScope = CoroutineScope(Dispatchers.Default)
fun run() {
coroutineScope.launch {
val postBody = "encodedinfo".trimMargin()
val request = Request.Builder()
.url("https://example.com")
.post(postBody.toRequestBody(MEDIA_TYPE_MARKDOWN))
.build()
client.newCall(request).execute().use { response ->
if (!response.isSuccessful) throw IOException("Unexpected code $response")
val token = response.body!!.string()
}
}
}
companion object {
val MEDIA_TYPE_MARKDOWN = "text/x-markdown; charset=utf-8".toMediaType()
}
}
使用此代码,我无法在请求代码块之外使用 token
变量。此代码块:
client.newCall(request).execute().use { response ->
if (!response.isSuccessful) throw IOException("Unexpected code $response")
val token = response.body!!.string()
}
这是获取 token
变量的第一个请求,我需要 token
以便我可以在另一个函数中使用它,以便我可以执行第二个请求并加载用户信息.
use 是在 Closeable
上使用的通用标准库函数。这是它的签名:
inline fun <T : Closeable?, R> T.use(block: (T) -> R): R
如您所见,它 returns 给定 lambda returns 的任何值。此结果是 lambda 块中的最后一个表达式,因此您可以这样做以在块外使用 token
:
val token = client.newCall(request).execute().use { response ->
if (!response.isSuccessful) throw IOException("Unexpected code $response")
response.body!!.string()
}
我有一个从服务器获取令牌的 kotlin 脚本。然后它使用该令牌执行另一个请求。但是,我似乎无法在下一个请求中使用该令牌,因为该令牌具有本地范围。
这是我的代码:
class requests{
private val client = OkHttpClient()
private val coroutineScope = CoroutineScope(Dispatchers.Default)
fun run() {
coroutineScope.launch {
val postBody = "encodedinfo".trimMargin()
val request = Request.Builder()
.url("https://example.com")
.post(postBody.toRequestBody(MEDIA_TYPE_MARKDOWN))
.build()
client.newCall(request).execute().use { response ->
if (!response.isSuccessful) throw IOException("Unexpected code $response")
val token = response.body!!.string()
}
}
}
companion object {
val MEDIA_TYPE_MARKDOWN = "text/x-markdown; charset=utf-8".toMediaType()
}
}
使用此代码,我无法在请求代码块之外使用 token
变量。此代码块:
client.newCall(request).execute().use { response ->
if (!response.isSuccessful) throw IOException("Unexpected code $response")
val token = response.body!!.string()
}
这是获取 token
变量的第一个请求,我需要 token
以便我可以在另一个函数中使用它,以便我可以执行第二个请求并加载用户信息.
use 是在 Closeable
上使用的通用标准库函数。这是它的签名:
inline fun <T : Closeable?, R> T.use(block: (T) -> R): R
如您所见,它 returns 给定 lambda returns 的任何值。此结果是 lambda 块中的最后一个表达式,因此您可以这样做以在块外使用 token
:
val token = client.newCall(request).execute().use { response ->
if (!response.isSuccessful) throw IOException("Unexpected code $response")
response.body!!.string()
}