【问题标题】:Cannot call suspend function from launch无法从启动中调用挂起功能
【发布时间】:2019-11-05 14:53:56
【问题描述】:

我是 kotlin 协程的新手,我正在尝试使用启动从 oncreate 调用挂起函数。但是代码不会执行。

launch {
    callSomeApi()
}

suspend fun callSomeApi() {
    withContext(Dispatcher.IO) {
        //perform network call
    }
}

它说挂起函数只能从协程或其他挂起函数中调用。虽然我从发布时调用它。请让我知道我做错了什么? please see attached image

【问题讨论】:

  • 你确定这是kotlinx.coroutines.launch,而不是其他名为launch的函数吗?试着去看看它的定义。
  • 是的。它是 kotlinx.coroutines.launch

标签: kotlin kotlin-coroutines


【解决方案1】:

你必须这样做:

  CoroutineScope(Dispatchers.Main).launch {
            someSuspendFunction()
        }

这样你分配一个 CoroutineScope 来管理协程进程。 请记住,您必须完全导入协程依赖项:

    // coroutines
implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-core:1.0.0'
implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-android:1.0.0'
implementation 'com.jakewharton.retrofit:retrofit2-kotlin-coroutines-adapter:0.9.2'

【讨论】:

  • 我添加了完全相同的依赖项。但我仍然得到同样的错误。请查看我附上错误截图的问题。您能告诉我您使用的是哪个版本的 kotlin 插件吗?
  • 我用的是最新的,1.3.40
  • 能否请您粘贴所有涉及的代码,您将所有这些代码放在哪里?
  • 真的很奇怪,我在任何类中测试了上面的代码,都看不到错误!。
  • 好吧原来是 kotlin gradle 插件导致了所有问题。我更新了 gradle 插件 1.3.31 并且错误消失了。谢谢!
猜你喜欢
  • 1970-01-01
  • 2022-06-23
  • 1970-01-01
  • 2021-03-26
  • 1970-01-01
  • 2015-01-06
  • 1970-01-01
  • 1970-01-01
  • 2013-06-19
相关资源
最近更新 更多