gpt4 book ai didi

java - 如何根据 Android Room 的参数查询实时数据?

转载 作者:行者123 更新时间:2023-12-02 10:26:02 25 4
gpt4 key购买 nike

我正在开发一个 Android 应用程序,用户可以根据特定日期保存餐食及其金额。时间存储为 yyyy-mm-dd目前 SQLite 数据库中的字符串(我稍后可能会更改数据类型)。用户可以在CalendarView上选择日期。和 RecylerView应该只显示所选日期的餐食。我不想检索所有行,而只是根据日期查询行。我正在使用Room Persistence Library .

我怎样才能实现这个目标?

我正在使用LiveData<List<MYOBJECT>>和适当的可观察监听器:

final MyViewModel myViewModel = ViewModelProviders.of(this).get(MyViewModel.class); 
String myDate = getDateFromCalendarView();

myViewModel.getMealsOnDate(myDate).observe(this, new Observer<List<MYOBJECT>>() {
@Override
public void onChanged(@Nullable List<MYOBJECT> myObjects) {
adapter.setItems(myObjects); // adapter from RecyclerView
}
});

这是我的 DAO 界面中的查询:

@Query("SELECT * FROM meals WHERE meals_date = :date")
LiveData<List<MYOBJECT>> getMealsOnDate(String date);

目前,观察者不会对myDate中的不同值使用react。因此我无法从数据库中查询不同的行。

这是否可能,或者我是否必须坚持查询整个表,然后从我的List<MYOBJECT中选择数据?

最佳答案

而不是制作列表observablemyDate 变量设为 observable 。因为改变的是日期而不是列表。您可以通过以下方式实现此目的:

让你的myDate作为MutabeLiveData在 View 模型中。然后,当从CalenderView中选择日期时,您可以更改其值。使用setValue(newDate) .

现在,观察这个 myDate ,并在值更改时,获取具有更新日期值的列表并更新 RecyclerView .

还可以使用时间戳,而不是将日期存储为 yyyy-mm-dd字符串。

************更新****************

进一步说明的示例

ViewModel类执行此操作

MutableLiveData<String>() myDate=new MutableLiveData<String>();

Activity这样做:

calendarView.setOnDateChangeListener( new CalendarView.OnDateChangeListener() {
public void onSelectedDayChange(CalendarView view, int year, int month, int dayOfMonth) {
myViewModel.myDate.setValue(""+year+"-"+month+"-"+dayOfMonth);//This will invoke the observer
}});

myViewModel.myDate.observe(this, new Observer<String>() {
@Override
public void onChanged(@Nullable String newDate) {
//do this on dedicated thread
List<MYOBJECT> myObjects=myViewModel.getMealsOnDate(newDate)
adapter.setItems(myObjects); // adapter from RecyclerView
}
});

注意:1.getMealsOnDate()不需要包装为 LiveData。 Dao中的方法可返回List<MYOBJECT>而不是LiveData<List<MYOBJECT>> .所以你不需要观察它。

2.不要在主线程上运行数据库查询,并调用 notifyDataSetChangedsetItems()适配器刷新 Recyclerview。

关于java - 如何根据 Android Room 的参数查询实时数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53952078/

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