【发布时间】:2020-01-21 12:17:33
【问题描述】:
我正在开发一个使用 MVVM 架构、存储库和 Room 数据库的 Android 项目。因此,在我的存储库中,我从数据库中获取一些数据并将 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 的字段。那么如何实现将名为mOrderModelLiveData的LiveData的实际值赋给mOrderModel呢?
一种选择是使用 LiveData 的 getValue() 方法。但这异步工作并且可以返回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。
我希望我描述的问题可以理解。
提前致谢。
克里斯
【问题讨论】:
标签: java android android-livedata