【发布时间】:2021-07-25 15:11:33
【问题描述】:
我正在编写一个 Kotlin 应用程序并使用 Firestore 作为我的数据库。我有 2 个LiveDatas,用来保存我当前用户的数据,定义如下:
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?> lint。 Transformations.map(...)怎么会返回null?
顺便说一句:我看到this 类似的问题,但就我而言,我确实初始化了referedMutableLiveData。
【问题讨论】:
-
你在哪里打电话
userData? -
感谢您的快速回放!我刚刚意识到我在定义
val userData之前在init块中调用它... -
我会回答这个问题以节省其他人的时间,因为 Android Studio 不会暗示如果在定义它的行之前引用非空字段可能为空。如果你愿意,你可以写下那个答案,我会接受的。
标签: java kotlin android-livedata android-livedata-transformations