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