你能在 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)
。
我想从变量之外的我的网站获取 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)
。