如何将 Fuel 与 Kotlin 协程一起使用

End*_*050 5 android kotlin kotlin-coroutines

在 Android 应用程序中,我尝试使用Fuel在 Kotlin 协程中发出 HTTP 请求。我的第一次尝试是在包装器中使用同步模式,如下所示:

launch(UI) {
    val token = getToken()
    println(token)
}

suspend fun getToken(): String? {
    var (request, response, result = TOKEN_URL.httpGet().responseString()
    return result.get()
}
Run Code Online (Sandbox Code Playgroud)

但这是返回一个android.os.NetworkOnMainThreadException. Fuel 文档提到了 .await() 和 .awaitString() 扩展,但我还没有弄清楚。

从 Android 应用程序的主 UI 线程在 Kotlin 协程中发出 Fuel http 请求的最佳方法是什么?坚持这一点 - 非常感谢......

Mar*_*nik 2

从 a 调用阻塞代码suspend fun不会自动将其转换为挂起代码。您调用的函数必须已经是其suspend fun自身。但是,正如您已经指出的,Fuel 对 Kotlin 协程具有一流的支持,因此您不必自己编写。

我研究了 Fuel 的测试代码

Fuel.get("/uuid").awaitStringResponse().third
    .fold({ data ->
        assertTrue(data.isNotEmpty())
        assertTrue(data.contains("uuid"))
    }, { error ->
        fail("This test should pass but got an error: ${error.message}")
    })
Run Code Online (Sandbox Code Playgroud)

这应该足以让你继续前进。例如,您可以编写一个简单的函数,如下所示:

suspend fun getToken() = TOKEN_URL.httpGet().awaitStringResponse().third
Run Code Online (Sandbox Code Playgroud)