未解决的参考:asLiveData 同时将 Flow 转换为 LiveData

Posted

技术标签:

【中文标题】未解决的参考:asLiveData 同时将 Flow 转换为 LiveData【英文标题】:Unresolved reference: asLiveData while converting Flow to LiveData 【发布时间】:2020-08-08 13:07:57 【问题描述】:

我有以下情况:

这是我的存储库类:

import com.mikhailovskii.timesapp.util.Result
import kotlinx.coroutines.delay
import kotlinx.coroutines.flow.flow

class LoginRepository 

    fun fetchUser() = flow 
        emit(Result.Loading)
        delay(1000)
        emit(Result.Success((0..20).random()))
    


有 ViewModel 类:

import androidx.lifecycle.LiveData
import androidx.lifecycle.ViewModel
import com.mikhailovskii.timesapp.util.Result

class LoginViewModel() : ViewModel() 

    private val loginRepository = LoginRepository()

    private val a = loginRepository.fetchUser()


    val user: LiveData<Result<Int>> get() = loginRepository.fetchUser().asLiveData()


还有 Result 类:

sealed class Result<out R> 

    data class Success<out T>(val data: T) : Result<T>()

    object Loading : Result<Nothing>()

    object Error : Result<Nothing>()


因此,当我尝试借助 asLiveData 方法将存储库的流转换为 LiveData 时,asLiveData 带有下划线,工作室写道这是一个未解决的参考。但我不明白为什么会这样,因为存储库返回 Flow。那么,这是什么问题,我该如何解决呢?

【问题讨论】:

【参考方案1】:

您缺少一个依赖项:

implementation "androidx.lifecycle:lifecycle-livedata-ktx:2.2.0"

(或任何更高版本)

【讨论】:

【参考方案2】:

我认为您缺少 LiveData 依赖项。

def lifecycle_version = "2.2.0"

// LiveData
implementation "androidx.lifecycle:lifecycle-livedata-ktx:$lifecycle_version"

Documentation

【讨论】:

不适用于 2.2.5 版。您对此有意见吗?

以上是关于未解决的参考:asLiveData 同时将 Flow 转换为 LiveData的主要内容,如果未能解决你的问题,请参考以下文章

未解决的参考:将数据绑定导入 MainActivity 时的数据绑定

将 sqldelight 的“未解决的参考:NativeSqliteDriver”添加到 ios 源集

未解决的参考:Parcelable Kotlin

Application.kt:未解决的参考:firebasemessaging

未解决的参考:viewModelScope - Kotlin Android

SQLDelight:Kotlin Multiplatform App 中未解决的参考 AndroidSqliteDriver