3

问题

我想通过使用 Fuel 作为 Httpclient 对 API 进行同步调用来获取 get 请求的结果。我在一个 Android (Anko) 项目中使用 Fuel。该调用只是一个简单的 get 请求,它总是因以下错误而失败:

失败:com.github.kittinunf.fuel.core.BubbleFuelError: null

引起:com.github.kittinunf.fuel.core.BubbleFuelError: null

背景

我想创建一个函数来返回使用 Fuel 的简单 get 请求的结果。但我无法同步检索结果。

我在互联网上找不到有关此主题的任何有用信息。

我尝试通过使用协程并使用 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()
4

1 回答 1

0

我找到了一种使用 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()

如果有人知道更好的方法来处理这个问题,请展示您的解决方案。

于 2019-04-05T09:08:06.897 回答