如何使用Kotlin协程燃料

时间:2018-05-18 01:08:45

标签: 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()
}

但那是返回android.os.NetworkOnMainThreadException。 Fuel文档提到了.await()和.awaitString()扩展,但我还没有想到它。

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

2 个答案:

答案 0 :(得分:2)

suspend fun调用阻止代码不会自动将其转换为暂停代码。您调用的函数必须已经是suspend fun。但是,正如您已经注意到的那样,Fuel对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

答案 1 :(得分:0)

从文档"开始一个协同程序,必须至少有一个挂起函数,它通常是一个挂起的lambda"

试试这个:

async {
    val token = getToken()
    println(token)
}