Android Room возвращают LiveData в Dao в подписке - PullRequest
0 голосов
/ 30 октября 2019

У меня есть комнатный DAO с методом find, который возвращает LiveData.

В моем репозитории я хочу вызвать этот метод Dao и вернуть объект LiveData.

В моем ViewModel я вызываюРепозиторий для LiveData и т. Д. *

Мой Dao:

@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 голосов
/ 31 октября 2019

Попробуйте использовать 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
}
...