绑定到一个尚未(尚未)初始化的 livedata 元素
Binding on a not (yet) initialized livedata element
也许标题不太符合问题,所以我会解释一下。
在我的应用程序中,我向服务器发送请求以获取一般用户信息。如果我收到,我想将它保存到本地房间数据库中。现在我们来解决问题。我想将这个用户直接绑定到数据库之外的视图。但是我无法绑定一个可能不存在的元素,因为请求正在进行中。
(我的错误解决方案):创建另一个包含布尔值的 livedate 元素。我在 Activity 中创建了一个观察者,并在布尔值观察到一个 "true" 之后添加观察者。使用此解决方案,我无法在 xml 布局中使用 "Data Binding"。
有人有想法吗? (如果您需要更多信息,请询问 - 我知道这是一个没有任何代码的非常抽象的问题)
正如 Sanlok Lee 提到的:
If you reassign user
then it becomes a completely different instance and the observer will not listen to the new LiveData
. Instead you can do val user: MediatorLiveData<User>
and later you can call user.addSource(dao.getUserById(1), ...)
或:
只需从数据库加载用户(如果您知道数据库中没有用户)。例如,您可以在 UserRepository 中执行此操作。
val user: LiveData<User> = userDao.getUser()
插入有效用户时,Livedata 会收到通知。
也许标题不太符合问题,所以我会解释一下。
在我的应用程序中,我向服务器发送请求以获取一般用户信息。如果我收到,我想将它保存到本地房间数据库中。现在我们来解决问题。我想将这个用户直接绑定到数据库之外的视图。但是我无法绑定一个可能不存在的元素,因为请求正在进行中。
(我的错误解决方案):创建另一个包含布尔值的 livedate 元素。我在 Activity 中创建了一个观察者,并在布尔值观察到一个 "true" 之后添加观察者。使用此解决方案,我无法在 xml 布局中使用 "Data Binding"。
有人有想法吗? (如果您需要更多信息,请询问 - 我知道这是一个没有任何代码的非常抽象的问题)
正如 Sanlok Lee 提到的:
If you reassign
user
then it becomes a completely different instance and the observer will not listen to the newLiveData
. Instead you can doval user: MediatorLiveData<User>
and later you can calluser.addSource(dao.getUserById(1), ...)
或: 只需从数据库加载用户(如果您知道数据库中没有用户)。例如,您可以在 UserRepository 中执行此操作。
val user: LiveData<User> = userDao.getUser()
插入有效用户时,Livedata 会收到通知。