У меня есть комната 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
deadpoint 30 Окт 2019 в 14:06

1 ответ

Попробуйте использовать 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
}
1
Sanlok Lee 31 Окт 2019 в 00:26