首页 > 解决方案 > 绑定未(尚未)初始化的 livedata 元素

问题描述

也许标题不太适合这个问题,所以我会解释一下。

在我的应用程序中,我向服务器发送请求以获取一般用户信息。如果我收到我想将它保存到本地房间数据库中。现在我们来解决这个问题。我想将这个用户直接绑定到数据库中的视图。但我无法绑定可能不存在的元素,因为请求正在进行中。

(我的坏解决方案):创建另一个拥有布尔值的 liveate 元素。我在 Activity 中创建了一个观察者,并在布尔值观察到“真”之后添加观察者。使用此解决方案,我无法在 xml 布局中使用“数据绑定”。

有人有想法吗?(如果您需要更多信息,请询问 - 我知道这是一个非常抽象的问题,没有任何代码)

标签: androidandroid-roomandroid-livedataandroid-jetpackandroid-viewmodel

解决方案


正如 Sanlok Lee 所说:

如果您重新分配user,那么它会变成一个完全不同的实例,并且观察者将不会听新的LiveData. 相反,您可以这样做val user: MediatorLiveData<User>,稍后您可以致电user.addSource(dao.getUserById(1), ...)

或者:只需从数据库加载用户(如果您知道数据库中没有用户)。例如,您可以在 UserRepository 中执行此操作。

val user: LiveData<User> = userDao.getUser()

当插入有效用户时,Livedata 将收到通知。


推荐阅读