你能在 Kotlin 的 stringRequest 变量之外从 Volley 获取响应数据吗?

Can you get the response data from Volley outside of the stringRequest variable in Kotlin?

我想从变量之外的我的网站获取 Volley stringRequest 响应。

val queue = Volley.newRequestQueue(this)
val url = ""


// Request a string response from the provided URL.
val stringRequest = StringRequest(
    Request.Method.GET, url,
    Response.Listener<String> { response -> 
        var obj = JSONObject(response) <-- cant access this variable outside of stringRequest
    },
    Response.ErrorListener { textView3.text = "That didn't work!" })

stringRequest.body.toString() <-- cant covert null to string

stringRequest.headers.toString() <-- output is {}

//here i want to do something like 

if (response == "True") {
    //do something
}

在我访问的网站上只有 {"check":"True"}

这个实现在其内置方式上是异步的,如果您在项目中使用协程,您实际上可以做的是让它看起来更像同步,您可以使用 suspendCoroutine,请参阅 https://kotlinlang.org/api/latest/jvm/stdlib/kotlin.coroutines.experimental/suspend-coroutine.html

示例:

suspend fun getData(url: String) = suspendCoroutine<String?> { cont ->
    val queue = Volley.newRequestQueue(this)

    val stringRequest = StringRequest(Request.Method.GET, url,
        Response.Listener<String> { response ->
            cont.resume(response)
        },
        Response.ErrorListener { cont.resume(null) })

    queue.add(stringRequest)
}

现在您可以从 Response.Listener()

中访问响应字符串

编辑: 此外,如果您不想 return 可空表达式并在每次使用此函数时检查可空性,您可以改为执行 cont.resumeWithException(e)