gpt4 book ai didi

java - 如何访问存储库中 LiveData 模型的值

转载 作者:行者123 更新时间:2023-11-30 05:19:02 25 4
gpt4 key购买 nike

我正在开发一个使用 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。

我希望我所描述的问题是可以理解的。

提前致谢。

克里斯

最佳答案

您可以按照下面的第二种方法进行操作:

public class Repository {

private final IDao mDao;
private OrderModel mOrderModel;
private MutableLiveData<OrderModel> mOrderModelLiveData;

public Repository(Database database) {

mDao = database.dao();
mOrderModel = new OrderModel();
mOrderModelLiveData = new MutableLiveData<>();
}

public void getData() {
mOrderModel = mDao.getOrderModel(); // Your dao should return model instead of livedata
mOrderModelLiveData.postValue(mOrderModel);
}

public MutableLiveData<OrderModel> getOrderModelLiveData() {

return mOrderModelLiveData;
}
}

关于java - 如何访问存储库中 LiveData 模型的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59840983/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com