映射的 LiveData 在 getValue() 调用上返回 null

问题描述 投票:0回答:1

我在我的项目中构建了一个 viewModel,并且编写了一个像这样的 LiveData 集

private val _user = MutableLiveData<User>()
val user= _user 

val id = _user.map {
    if ( something ) {
        value 
    } else {
        null
    }
}

我面临的问题是,当我在 Fragment/Activity 中观察“id”时,我可以接收来自“id”LiveData 的更新,但是如果我尝试通过“id.value”从“id”获取当前值,它会返回 null即使“_user”liveData 已更新。

这有什么理由吗?我错过了什么吗?

android mapping android-livedata android-livedata-transformations
1个回答
0
投票

我遇到了和你一样的问题,通过下面的代码解决了。

fun <T> LiveData<T>.safeGetValue(): T? {
    // because MediatorLiveData only setValue when source changed and
    // has active observers, so if not, we add an empty observer to
    // trigger it's setValue
    return if (this is MediatorLiveData && !hasActiveObservers()) {
        val emptyObserver = Observer<T> {  }
        observeForever(emptyObserver)
        value.also { removeObserver(emptyObserver) }
    } else {
        value
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.