如何将 Fuel 与 Kotlin 协程一起使用
How to use Fuel with a Kotlin coroutine
在 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()
}
但这是返回 android.os.NetworkOnMainThreadException
。 Fuel 文档提到了 .await() 和 .awaitString() 扩展,但我还没弄明白。
从 Android 应用程序的主 UI 线程在 Kotlin 协程中发出 Fuel http 请求的最佳方法是什么?坚持这一点 - 非常感谢...
来自文档"to start a coroutine, there must be at least one suspending function, and it is usually a suspending lambda"
试试这个:
async {
val token = getToken()
println(token)
}
从 suspend fun
调用阻塞代码不会自动将其转换为挂起代码。您调用的函数本身必须已经是 suspend fun
。但是,正如您已经指出的那样,Fuel 首先 class 支持 Kotlin 协程,因此您不必自己编写。
我研究过 Fuel 的 test code:
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}")
})
这应该足以让您继续前进。例如,您可以编写一个简单的函数,如下所示:
suspend fun getToken() = TOKEN_URL.httpGet().awaitStringResponse().third
在 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()
}
但这是返回 android.os.NetworkOnMainThreadException
。 Fuel 文档提到了 .await() 和 .awaitString() 扩展,但我还没弄明白。
从 Android 应用程序的主 UI 线程在 Kotlin 协程中发出 Fuel http 请求的最佳方法是什么?坚持这一点 - 非常感谢...
来自文档"to start a coroutine, there must be at least one suspending function, and it is usually a suspending lambda"
试试这个:
async {
val token = getToken()
println(token)
}
从 suspend fun
调用阻塞代码不会自动将其转换为挂起代码。您调用的函数本身必须已经是 suspend fun
。但是,正如您已经指出的那样,Fuel 首先 class 支持 Kotlin 协程,因此您不必自己编写。
我研究过 Fuel 的 test code:
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}")
})
这应该足以让您继续前进。例如,您可以编写一个简单的函数,如下所示:
suspend fun getToken() = TOKEN_URL.httpGet().awaitStringResponse().third