Можете ли вы получить данные ответа от Volley вне переменной stringRequest в Kotlin? - PullRequest
1 голос
/ 16 февраля 2020

Я хочу получить ответ 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"}

1 Ответ

1 голос
/ 16 февраля 2020

Эта реализация асинхронна в том смысле, в котором она встроена. То, что вы на самом деле можете сделать, чтобы она выглядела более синхронно, это если вы используете сопрограммы в своем проекте, вы можете использовать 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 ()

Редактировать: Кроме того, вы можете сделать cont.resumeWithException(e) вместо этого, если вы не хотите возвращать обнуляемое выражение и проверять обнуляемость каждый раз, когда вы используете эту функцию.

...