30

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

在我的视图模型中:

class MyViewModel: ViewModel() {

    lateinit var river: Flow<Int>

    fun doStuff() {
        river = flow {
            emit(1)
        }.flowOn(Dispatchers.Default)
        .catch {
            emit(0)
        }
    }
}

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

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

这怎么可能发生?

4

3 回答 3

62

可能,您collect().Flow

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

(我真的希望他们没有将这些命名为相同的......)

于 2020-06-12T15:36:52.273 回答
3

我在尝试从某些数据存储文件中收集多个流时遇到了同样的问题。首先,确保你已经在你的应用级 gradle 文件中导入了这两个依赖项。确保更换合适的版本;

implementation("androidx.lifecycle:lifecycle-runtime-ktx:2.4.0-beta01")
implementation("org.jetbrains.kotlinx:kotlinx-coroutines-core:1.5.2")

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

import kotlinx.coroutines.flow.collect

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

于 2021-09-19T11:57:38.397 回答
0

对我来说,解决方案是将括号放在末尾collect

viewModel.river.collect()

于 2020-11-23T19:57:45.183 回答