Топливо httpGet () responseString, Ошибка: com.github.kittinunf.fuel.core.BubbleFuelError: null - PullRequest
3 голосов
/ 03 апреля 2019

Проблема

Я хочу получить результат запроса 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 Ответ

0 голосов
/ 05 апреля 2019

Я нашел способ решить эту проблему с помощью сопрограмм kotlin.

fun doRequest() = runBlocking {
    val (_, _, result) = Fuel.get("https://jsonplaceholder.typicode.com/posts/1").awaitStringResponse()
    result
}

Использование runBlocking заблокирует текущий поток до его завершения.

Источник: https://kotlin.github.io/kotlinx.coroutines/kotlinx-coroutines-core/kotlinx.coroutines/run-blocking.html

Когда вы не хотите блокировать текущийВы можете запустить эту функцию в новом потоке, например:

Thread(
    Runnable {
      val result = doRequest()
      Log.e("Result", result)
    }
).start()

Если кто-то знает лучший способ справиться с этим, пожалуйста, покажите свое решение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...