无法将不可为 null 的 LiveData 值设置为 null

ped*_*dja 12 android kotlin android-livedata kotlin-null-safety

下面代码返回title的错误,没有意义

private val _error = MutableLiveData<String?>()
val error: LiveData<String?> get() = _error


_error.postValue(null)  //Error Cannot set non-nullable LiveData value to null [NullSafeMutableLiveData]
Run Code Online (Sandbox Code Playgroud)

参数String_error 显然是空的,我做错了什么?

小智 24

这似乎与已经针对androidx.lifecycle2.3.0 https://issuetracker.google.com/issues/169249668 的预发布版本 报告的错误有关。

我发现的解决方法:

  1. 关闭或降低NullSafeMutableLiveDatain 的严重程度

build.gradle

android {
  ...
  lintOptions {
    disable 'NullSafeMutableLiveData'
  }
}
Run Code Online (Sandbox Code Playgroud)

lint.xml在根目录中

<?xml version="1.0" encoding="UTF-8"?>
<lint>
    <issue id="NullSafeMutableLiveData" severity="warning" />
</lint>
Run Code Online (Sandbox Code Playgroud)
  1. MutableLiveData通过支持属性跳舞来完成封装工作(这真的很伤我的眼睛)。
class ExampleViewModel : ViewModel() {

    private val _data1 = MutableLiveData<Int>()
    val data1: LiveData<Int> = _data1

    private val _data2 = MutableLiveData<Int?>()
    val data2: LiveData<Int?> = _data2

    fun funct() {
        _data1.value = 1
        _data2.value = null
    }
}
Run Code Online (Sandbox Code Playgroud)