【问题标题】:Expected non-nullable value for MutableLiveDataMutableLiveData 的预期不可为空值
【发布时间】:2021-04-07 12:00:35
【问题描述】:
private val _users = MutableLiveData<List<User>>()
val users: LiveData<List<User>> get() = _users

fun getUsers() {
    viewModelScope.launch {
        _users.value = users()
    }
}

suspend fun users(): List<User> {
    TODO("Not implemented")
}

我在_users.value = users() 收到以下错误

预期的不可为空的值。检验信息: 此检查可确保 LiveData 值在显式声明为不可为空时不为空。

我正在使用生命周期版本2.3.1。问题似乎出在挂起函数 users() 上。如果我删除挂起修饰符,它就可以正常工作。

【问题讨论】:

    标签: android kotlin viewmodel android-livedata kotlin-null-safety


    【解决方案1】:

    只需使用private val _users:MutableLiveData&lt;List&lt;User&gt;&gt; = MutableLiveData() 而不是private val _users = MutableLiveData&lt;List&lt;User&gt;&gt;()

    【讨论】:

    • 这些应该是等价的意思。它似乎是一个 Android Lint 错误。您知道这是否记录在任何地方或报告在 AOSP 错误跟踪器上?
    • 不,我还没有找到任何文档,但我用它来消除错误。
    • 这很奇怪,_users.postValue(users()) 也让它可以正常运行。
    【解决方案2】:

    试试this._users.value = users()。在前面添加this 对我有用。不知道为什么。在您的情况下,您可能需要 this@yourModel._users.value = users(),因为您在 viewModelScope 中调用它。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-05-21
      • 2019-08-27
      • 2021-12-24
      • 1970-01-01
      相关资源
      最近更新 更多