如何在 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()
}