У меня есть комната 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 ответ
Попробуйте использовать 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
}
Похожие вопросы
Новые вопросы
android
Android — это мобильная операционная система Google, используемая для программирования или разработки цифровых устройств (смартфонов, планшетов, автомобилей, телевизоров, одежды, очков, IoT). Для тем, связанных с Android, используйте теги, специфичные для Android, такие как android-intent, android-activity, android-adapter и т. д. Для вопросов, отличных от разработки или программирования, но связанных с Android framework, используйте эту ссылку: https://android .stackexchange.com.