类型不匹配推断类型是 () -> Unit 但 FlowCollector<Int> 是预期的
Type mismatch inferred type is () -> Unit but FlowCollector<Int> was expected
当尝试从 Flow 中收集类型突然不匹配时,它正在工作然后突然启动。
在我的视图模型中:
class MyViewModel: ViewModel() {
lateinit var river: Flow<Int>
fun doStuff() {
river = flow {
emit(1)
}.flowOn(Dispatchers.Default)
.catch {
emit(0)
}
}
}
然后在我的 activity 我有以下内容:
lifecycleScope.launch {
viewModel.river.collect { it ->
// this whole collect is what has the error.
}
}
但是collect
报错:Type mismatch: inferred type is () -> Unit but FlowCollector<Int> was expected
.
怎么会这样?
您可能正在使用 the direct collect()
function on Flow
。
对于您的语法,您需要 import
the collect()
extension function。
(我真的希望他们不要用相同的名字...)
对我来说,解决方案是在 collect
:
的末尾加上括号
viewModel.river.collect()
我在尝试从某些数据存储文件中收集多个流时遇到了同样的问题。首先,请确保您已将这两个依赖项导入到您的应用程序级 gradle 文件中。确保替换为合适的版本;
implementation("androidx.lifecycle:lifecycle-runtime-ktx:2.4.0-beta01")
implementation("org.jetbrains.kotlinx:kotlinx-coroutines-core:1.5.2")
同步您的 gradle 文件后,导入收集;
import kotlinx.coroutines.flow.collect
您的 collect{ }
现在应该可以正常工作了。
当尝试从 Flow 中收集类型突然不匹配时,它正在工作然后突然启动。
在我的视图模型中:
class MyViewModel: ViewModel() {
lateinit var river: Flow<Int>
fun doStuff() {
river = flow {
emit(1)
}.flowOn(Dispatchers.Default)
.catch {
emit(0)
}
}
}
然后在我的 activity 我有以下内容:
lifecycleScope.launch {
viewModel.river.collect { it ->
// this whole collect is what has the error.
}
}
但是collect
报错:Type mismatch: inferred type is () -> Unit but FlowCollector<Int> was expected
.
怎么会这样?
您可能正在使用 the direct collect()
function on Flow
。
对于您的语法,您需要 import
the collect()
extension function。
(我真的希望他们不要用相同的名字...)
对我来说,解决方案是在 collect
:
viewModel.river.collect()
我在尝试从某些数据存储文件中收集多个流时遇到了同样的问题。首先,请确保您已将这两个依赖项导入到您的应用程序级 gradle 文件中。确保替换为合适的版本;
implementation("androidx.lifecycle:lifecycle-runtime-ktx:2.4.0-beta01")
implementation("org.jetbrains.kotlinx:kotlinx-coroutines-core:1.5.2")
同步您的 gradle 文件后,导入收集;
import kotlinx.coroutines.flow.collect
您的 collect{ }
现在应该可以正常工作了。