使用 LiveData 检查 RoomDatabase 是否为空

Checking if RoomDatabase is empty while using LiveData

我正在尝试在我的 Android 应用程序中使用 RoomDatabase。我正在使用 LiveData 来自动刷新片段中的更改。

我第一次 运行 安装我的应用程序时,我从 API 获取数据,创建我的 RoomDatabase 并存储我的数据。

第二次我 运行 我的应用程序我想检查我的数据库是否不为空。但是在使用 LiveData 时:以下代码返回 null。

AppDatabase.getInstance(getContext()).getRecipeDao().getAllRecipes().getValue();

我读过"if the response is an observable data type, such as Flowable or LiveData, Room watches all tables referenced in the query for invalidation"。

如何检查我的 RoomDatabase 是否有数据或为空?

所以在自己实施之后,我发现你需要做一些事情:

  1. 确保您有 Observer 用于更改 LiveData
  2. 除非您使用 LiveCyclerOwner,否则您需要调用 observeForever(Observer<T> observer),然后使用它代替:observe (LifecycleOwner owner, Observer<T> observer)
  3. 最后,getValue()上有一个有趣的注释:

Returns the current value. Note that calling this method on a background thread does not guarantee that the latest value set will be received

所以重申一下,我认为你的方法行不通。

您需要创建某种类型的单独检查,而不是使用 returns a LiveData class 的方法,因为它不能保证收到最新的值集通过调用 getValue().

最后我会推荐一些超级简单的东西,比如给你的 Dao

添加一个新方法
@Query("SELECT * FROM recipes LIMIT 1")
Recipe getAnyRecipe();

并执行此检查以查找 null 以查看食谱 table.

中是否存在任何内容