Android Room在订阅中返回Dao中的LiveData

时间:2019-10-30 11:06:47

标签: android android-room android-livedata

我有一个带有查找方法的房间DAO,该方法返回一个LiveData。

在我的存储库中,我想调用该Dao方法并返回LiveData对象。

在ViewModel中,我将LiveData称为存储库,依此类推。

我的道:

@Query("SELECT * FROM user where userId = :userId)
LiveData<User> loadUser(String userId);

现在在我的存储库中,我将此称为Dao,但是对于userId,我必须订阅一个会话。

public LiveData<User> loadUser() {
    session.getSubject().subscribe(session -> {
      db.getDb().userDao().loadUser(session.userId);
      //TODO: How I can return here my LiveData???
    });
}

我该如何处理这样的问题? 如何在存储库方法中返回此LiveData对象。

1 个答案:

答案 0 :(得分:0)

尝试像这样使用MediatorLiveData

public LiveData<User> loadUser() {
    MediatorLiveData<User> userLiveData = new MediatorLiveData<>();
    session.getSubject().subscribe(session -> {
        userLiveData.addSource(db.getDb().userDao().loadUser(session.userId), user -> {
            userLiveData.setValue(user);
        });
    });
    return userLiveData
}