类型不匹配推断的类型是 () -> Unit 但预期 FlowCollector<Int>

jus*_*ser 20 android kotlin kotlin-coroutines kotlin-flow

当试图从 Flow 中收集时,类型突然不匹配,它正在工作,然后突然启动。

在我的视图模型中:

class MyViewModel: ViewModel() {

    lateinit var river: Flow<Int>

    fun doStuff() {
        river = flow {
            emit(1)
        }.flowOn(Dispatchers.Default)
        .catch {
            emit(0)
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

然后在我的活动中,我有以下内容:

lifecycleScope.launch {
    viewModel.river.collect { it ->
        // this whole collect is what has the error. 
    }
}
Run Code Online (Sandbox Code Playgroud)

collect给出了错误:Type mismatch: inferred type is () -> Unit but FlowCollector<Int> was expected

这怎么会发生?

Com*_*are 43

可能,您正在使用直接collect()函数Flow

对于你的语法,你需要import collect()扩展功能

(我真的希望他们不要给这些命名相同的...)

  • `导入 kotlinx.coroutines.flow.collect` (9认同)
  • 这每次都让我感动 (6认同)
  • 它不适用于“1.6.0”,我必须降级我的应用程序才能保持其工作。我希望能找到解决办法。 (4认同)
  • 伙计,真是个陷阱。 (3认同)

Ken*_*rwa 9

我在尝试从某些数据存储文件收集多个流时遇到了同样的问题。首先,确保您已在应用程序级 gradle 文件中导入这两个依赖项。另请确保将版本号替换为合适的版本。

implementation("androidx.lifecycle:lifecycle-runtime-ktx:2.4.0-beta01")
implementation("org.jetbrains.kotlinx:kotlinx-coroutines-core:1.5.2")
Run Code Online (Sandbox Code Playgroud)

同步你的gradle文件后,导入collect;

import kotlinx.coroutines.flow.collect
Run Code Online (Sandbox Code Playgroud)

collect{ }现在应该可以正常工作了。