【问题标题】:Type mismatch inferred type is () -> Unit but FlowCollector<Int> was expected类型不匹配推断类型为 () -> Unit 但应为 FlowCollector<Int>
【发布时间】:2020-06-12 15:33:01
【问题描述】:

当尝试从 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 () -&gt; Unit but FlowCollector&lt;Int&gt; was expected

怎么会这样?

【问题讨论】:

    标签: android kotlin kotlin-coroutines kotlin-flow


    【解决方案1】:

    您可能正在使用the direct collect() function on Flow

    对于你的语法,你需要importthe collect() extension function

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

    【讨论】:

    • 这让我每一次
    • import kotlinx.coroutines.flow.collect
    • 老兄,真是个陷阱。
    • 它不适用于1.6.0,我必须降级我的应用程序才能使其正常工作。我希望找到解决方案。
    【解决方案2】:

    我在尝试从某些数据存储文件收集多个流时遇到了同样的问题。首先,确保你已经在你的应用级 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{ } 现在应该可以正常工作了。

    【讨论】:

      【解决方案3】:

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

      viewModel.river.collect()

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-09-15
        • 2020-04-24
        • 2020-11-30
        • 1970-01-01
        相关资源
        最近更新 更多