Я работаю над проектом Android с использованием архитектуры MVVM, репозиториев и базы данных Room. Поэтому в моем репозитории я извлекаю некоторые данные из базы данных и возвращаю объект LiveData в мою ViewModel. Вот мой код (очень упрощенный):
public class Repository {
private final IDao mDao;
private OrderModel mOrderModel;
private LiveData<OrderModel> mOrderModelLiveData;
public Repository(Database database) {
mDao = database.dao();
mOrderModelLiveData= mDao.getOrderModel();
mOrderModel = new OrderModel();
}
public LiveData<OrderModel> getOrderModelLiveData() {
return mOrderModelLiveData;
}
}
Как видите, у меня есть поле с именем mOrderModel. Так как же добиться назначения фактического значения LiveData с именем mOrderModelLiveData для mOrderModel?
Один из вариантов - использовать метод getValue () LiveData. Но это работает асинхронно и может возвращать NULL. Второй вариант - добавить новый метод DAO, который возвращает mOrderModel напрямую без LiveData. Но тогда mOrderModel
не обновляется автоматически. Или я должен использовать Transformations.switchMap
, может быть, так:
Transformations.map(mDao.getOrderModel(), new Function<LiveData<OrderModel>>() {
@Override
public Object apply(OrderModel orderModel) {
mOrderModel = orderModel;
return null;
}
};
Я видел пример, где используется observeForever
, но я не уверен, стоит ли наблюдать LiveData без жизненный цикл.
Моя цель - иметь в моем хранилище набор полей mOrderModel
без использования LiveData.
Надеюсь, я описал мою проблему понятной.
Заранее спасибо .
Крис