提问者:小点点

使用Room DB+MVVM从数据库中进行单次查询


我正在尝试做一个应用程序使用房间数据库和MVVM模式。 我将所有业务逻辑添加到ViewModel中,因此有一些类需要从数据库中(一次)获得一些对象。 我希望异步加载数据,但正如我看到的那样,我无法在ViewModel中观察数据。 我是否需要在activity/片段中添加observable,然后将其传递给ViewModel? 或者有更好的解决办法?


共1个答案

匿名用户

ViewModel不应用于观察数据。

它们只保存LiveData或其他可观察的数据,使其可供activity/碎片观察/消费。

但是您可以使用转换来操作原始的LiveData并创建新的LiveData。

然后可以从activity/片段中观察这个新的LiveData。

因此,对于一个实例,您有一个用户数据库(带有名称和ID),并且您得到一个用户的LiveData。 并且只想提取所有用户的名称。 您可以使用transformations.map()创建只获取用户名的新LiveData。

LiveData<User> usersLiveData = usersRepo.getUsers();
LiveData<String> userNamesLiveData = Transformations.map(usersLiveData, user -> user.name);

您可以从activity/片段中观察这个UsernamesLiveData,以更新UI或执行其他操作。