[Android Room在订阅中以Dao返回LiveData

问题描述 投票:0回答:1

我有一个带有查找方法的房间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对象。

android android-room android-livedata
1个回答
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
}
© www.soinside.com 2019 - 2024. All rights reserved.