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