android - 如何通过存储库将视图模型中的参数传递给 Dao
问题描述
我正在创建具有以下架构的应用程序:房间数据库 <-> 存储库 <-> 视图模型 <-> 片段。我想要实现的是通过带有一些给定变量的 Dao 对象通过 Repository 从 View Model 执行查询。我创建了用于从 Dao 对象的表中选择一些数据的查询:
@Query("SELECT * FROM meal_table WHERE mealDate = :date")
public LiveData<MealWithProducts> getMealWithProductsFromDate(String date);
然后我在 Repository 类中设置了固定值用于测试目的,例如:
MealWithProductsRepository.class
public class MealWithProductsRepository {
private final MealWithProductsDao mealWithProductsDao;
private final LiveData<MealWithProducts> mealWithProductsFromDate;
public MealWithProductsRepository(Application application){
AppDatabase db = AppDatabase.getDatabase(application);
mealWithProductsDao = db.mealWithProductsDao();
mealWithProductsFromDate = mealWithProductsDao.getMealWithProductsFromDate("15-08-2021");
}
public LiveData<MealWithProducts> getMealWithProductsFromDate() {
return mealWithProductsFromDate;
}
}
DiaryEntryViewModel.class
public class DiaryEntryViewModel extends AndroidViewModel {
private final MealWithProductsRepository mealWithProductsRepository;
private final LiveData<MealWithProducts> mealWithProductsFromDate;
public DiaryEntryViewModel(@NonNull Application application) {
super(application);
mealWithProductsRepository = new MealWithProductsRepository(application);
mealWithProductsFromDate = mealWithProductsRepository.getMealWithProductsFromDate();
}
public LiveData<MealWithProducts> getMealWithProductsFromDate() { return mealWithProductsFromDate; }
}
我已经测试了这个单一案例并且它有效,但是我不知道如何将参数从 View Model 类传递到存储库,因为这个查询是在 Repository 构造函数中执行的,并且 View Model 中的 Repository 引用是在 View Model 构造函数中创建的。请您指出我应该如何进一步处理这个问题的方向。提前致谢!
解决方案
public class DiaryEntryViewModel extends AndroidViewModel {
private final MealWithProductsRepository mealWithProductsRepository;
private final LiveData<MealWithProducts> mealWithProductsFromDate;
public DiaryEntryViewModel(@NonNull Application application) {
super(application);
mealWithProductsRepository = new MealWithProductsRepository(application);
}
public LiveData<MealWithProducts> getMealWithProductsFromDate(String date) { return mealWithProductsRepository.getMealWithProductsFromDate(); }
}
public class MealWithProductsRepository {
private final MealWithProductsDao mealWithProductsDao;
private final LiveData<MealWithProducts> mealWithProductsFromDate;
public MealWithProductsRepository(Application application){
AppDatabase db = AppDatabase.getDatabase(application);
mealWithProductsDao = db.mealWithProductsDao();
}
public LiveData<MealWithProducts> getMealWithProductsFromDate(String date) {
return mealWithProductsDao.getMealWithProductsFromDate(date);
}
}
@Query("SELECT * FROM meal_table WHERE mealDate = :date")
public LiveData<MealWithProducts> getMealWithProductsFromDate(String date);
你为什么不这样使用?
推荐阅读
- python-3.x - 比较 pandas.DataFrame 中列之间的分类变量
- ios - 带有披露指示器的 SwiftUI 列表按钮
- python - 从没有对象的类中调用函数
- python - 根据其他列值删除重复项(Python)
- sql - 从同一个表更新相同的数据
- c# - I can't run my Nunit test in asp.net core
- php - 如何进行mysql查询并将其转换为php中的数组
- swift - CLGeocoder().geocodeAddressString error codes
- python - 如果我没有在 requests.get() 中指定用户代理会发生什么?
- c - 如何调用外部程序集文件中的函数