我第一次使用Room。我正在研究LiveData的概念。我知道我们可以将记录从数据库中获取到LiveData,并附加haveObservers。
@Query("SELECT * FROM users")
<LiveData<List<TCUser>> getAll();
但我在后台执行同步,需要从服务器获取数据并与名为“users”的RoomDatabase表中的数据进行比较,然后从用户表中插入、更新或删除数据。在采取任何操作之前,如何遍历LiveData列表?如果将其放入for循环中,会出现错误。
或者,我在这种情况下不应该使用LiveData吗?
我想我需要调用
<LiveData<List<TCUser>> getAll().getValue()
但这样做是否正确呢?这里有更多的代码,以便让您了解我试图做什么:
List<User>serverUsers: Is the data received from a response from an API
private void updateUsers(List<User> serverUsers) {
List<UserWithShifts> users = appDatabase.userDao().getAllUsers();
HashMap<String, User> ids = new HashMap();
HashMap<String, User> newIds = new HashMap();
if (users != null) {
for (UserWithShifts localUser : users) {
ids.put(localUser.user.getId(), localUser.user);
}
}
for (User serverUser : serverUsers) {
newIds.put(serverUser.getId(), serverUser);
if (!ids.containsKey(serverUser.getId())) {
saveShiftForUser(serverUser);
} else {
User existingUser = ids.get(serverUser.getId());
//If server data is newer than local
if (DateTimeUtils.isLaterThan(serverUser.getUpdatedAt(), existingUser.getUpdatedAt())) {
deleteEventsAndShifts(serverUser.getId());
saveShiftForUser(serverUser);
}
}
}
其中:
@Query("SELECT * FROM users")
List<UserWithShifts> getAllUsers();
updateUsers()函数中第一行提取数据的方式是否正确,应该使用哪种方法?
<LiveData<List<User>> getAll().getValue()
谢谢。