我正在编写一个Kotlin应用程序,并使用Firestore作为我的数据库。我有两个LiveData,以保存当前用户的数据,定义如下:
private val userDocument = MutableLiveData<DocumentSnapshot?>()
val userData = Transformations.map(userDocument) { it?.toObject(UserModel::class.java) }不知何故,userData是空的,所有对它的引用(例如:userData.value?.id)都抛出:
java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.Object androidx.lifecycle.LiveData.getValue()' on a null object reference如果我加上? (userData?.value?.id),就会得到Unnecessary safe call on a non-null receiver of type LiveData<UserModel?>皮棉。Transformations.map(...)如何返回null?
顺便说一句:我看到了this类似的问题,但在我的例子中,我确实初始化了引用的MutableLiveData。
发布于 2021-07-26 08:16:01
原因是我在定义userData之前引用了它。我的代码是这样的:
private val userDocument = MutableLiveData<DocumentSnapshot?>()
init {
Authentication.currentUser.observeForever { switchUserDocument(it?.uid ?: "") }
}
val userData = Transformations.map(userDocument) { it?.toObject(UserModel::class.java) }
private fun switchUserDocument(id: String): Task<DocumentSnapshot>? {
if (id.isEmpty()) {
...
} else if ((userData.value?.id ?: "") != id) {
...
}
}我忘记了在Kotlin中定义的顺序和init阻塞的问题,并为此浪费了一些时间。希望它能为将来的某人节省时间:)
https://stackoverflow.com/questions/68519891
复制相似问题