Android会议室数据库 - 设计数据库以处理同步和异步查询

时间:2018-04-10 13:50:49

标签: android android-room android-livedata

我是Android编程的新手,甚至更适合使用Room数据库。我已经对Room的Android架构组件进行了一些阅读,并且还阅读了一些教程,用于创建一个简单的工作室数据库。

我找到的一个非常好的例子是:https://google-developer-training.gitbooks.io/android-developer-advanced-course-practicals/unit-7-working-with-architecture-components/lesson-15-room,-livedata,-viewmodel/15-1-a-room-livedata-viewmodel/15-1-a-room-livedata-viewmodel.html

我还简要阅读了一些在线发现的其他教程。我学到的一些东西是正常的@Insert和@Delete带注释的操作由Room自动处理,但对于任何@Query带注释的操作,我需要确保异步调用它们以避免锁定主UI线程。

许多示例涵盖LiveData以及如何异步使用简单的@Insert和@Delete,LiveData会观察到任何更改,使用LiveData包装的任何数据的ArrayAdaptor会显示更新的信息。

我目前正在使用App来清点图书。 在主要活动中,我想向用户显示所有书籍的列表,上述方法效果很好。我将创建一个如下所示的查询,然后观察任何更改,并允许ListView在表更新时自动更改。

@Query("SELECT * FROM book")
public LiveData<List<Book>> findAllBooks();

但是,我如何异步处理其他@Query操作,如下所示,获取结果并尽快显示,然后将其显示给用户?

@Query("SELECT * FROM book where category = :category")
public List<Book> getBookByCatetory(String category);

当用户想要按类别过滤主书籍列表时,我希望我的应用程序运行上述查询并获取具有指定类别的所有书籍,然后在另一个活动中向用户显示只读列表。它不应该要求任何观察员。这听起来应该是一个同步操作,但不鼓励这样的过程,因为它可能会锁定UI线程。

解决此问题的最佳设计是什么?

0 个答案:

没有答案