#android #kotlin #kotlin-fuel
#Android #котлин #котлин-топливо
Вопрос:
Проблема
Я хочу получить результат запроса get, выполнив синхронный вызов API, используя Fuel в качестве Httpclient. Я использую Fuel в проекте Android (Anko). Вызов — это всего лишь простой запрос get, который всегда завершается с этой ошибкой:
Сбой: com.github.kittinunf.fuel.core.Ошибка BubbleFuelError: null
Вызвано: com.github.kittinunf.fuel.core.Ошибка BubbleFuelError: null
Предыстория
Я хочу создать функцию для возврата результата простого запроса get с использованием Fuel. Но я не могу получить результат синхронно.
Я не могу найти никакой полезной информации по этому вопросу в Интернете.
Я попытался дождаться результата с помощью сопрограмм и использовать функцию awaitStringResponse. —> Не сработало, как ожидалось.
Только что ответил на проблему Github, охватывающую эту тему (помеченную как ошибка). https://github.com/kittinunf/fuel/issues/606
Есть ли какой-либо обходной путь?
Пример кода
Этот код работает:
requestUrl.httpGet().responseString { _, _, result ->
when (result) {
is Result.Success -> {
// do something on success
}
is Result.Failure -> {
// do something on fail
}
}
}
Но, используя эту функцию, я не могу вернуть результат.
Этот код НЕ работает
val (_,_,result)= Fuel.get(requestUrl).responseString()
Ответ №1:
Я нашел способ решить эту проблему с помощью сопрограмм kotlin.
fun doRequest() = runBlocking {
val (_, _, result) = Fuel.get("https://jsonplaceholder.typicode.com/posts/1").awaitStringResponse()
result
}
Использование runBlocking заблокирует текущий поток до его завершения.
Если вы не хотите блокировать текущий поток, вы можете запустить эту функцию в новом потоке следующим образом:
Thread(
Runnable {
val result = doRequest()
Log.e("Result", result)
}
).start()
Если кто-то знает лучший способ справиться с этим, пожалуйста, покажите свое решение.