android - Retrofit 2 with 协程调用适配器工厂取消请求

标签 android kotlin retrofit2 deferred kotlinx.coroutines

我正在尝试使用带有协程调用适配器工厂的 retrofit2 在我的 android 应用程序中实现动态搜索功能。当用户键入关键字并且关键字长度有效时,应用程序会向服务器发出请求。在单个请求中,我可以像下面这样请求

launch(UI) {
        try {
            val user = Client.provideService().getUsers()
            //do sometihng with user.await()
        }catch (e: Exception){
            //Handle exception
        }
    }

但是如果我想取消之前的所有请求并在用户更改可编辑项时发出新请求怎么办?我搜索了很多示例,但找不到任何有用的东西。感谢您的帮助。

最佳答案

如果你想取消协程,你可以按照 guide 中的说明进行操作.您需要对从 launch 返回的 Job 调用 cancel:

val job = launch {
   //...
}

job.cancel() // cancels the job 

但了解协程取消是协作的非常重要,即在协程中执行的 block 需要对来自协程外部的取消使用react。您可以使用 isActive 检查状态,如 here 所述.

对于您的示例,一旦 isActive 变为 ,您就必须能够取消 Client.provideService().getUsers() 的计算是的

关于android - Retrofit 2 with 协程调用适配器工厂取消请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48529191/

相关文章:

android - Retrofit2 在 Kotlin 中排队 onResponse()

android - 声明样式和样式之间的区别

Android MediaStore 获取不同的音乐文件文件夹

android - 在 Kotlin 的内部类中使用 fragment 的上下文

android - Kotlin 多层 IT 引用

kotlin - 如何更改默认推断没有接收者的函数类型?

java - 使用 Retrofit2 调用 API 时无法接收数据

android - 如何从 Android .apk assets 文件夹中解压 LUA 脚本?

java - 自定义 Exoplayer 播放和暂停按钮

android - 使用 RxJava2 和 Retrofit2 Mosby MVI 的 OnErrorNotImplementedException