使用LiveData时检查RoomDatabase是否为空

yal*_*tta 6 android dao android-room android-livedata

我正在尝试RoomDatabase在我的Android应用中使用。而且我习惯于LiveData能够自动刷新片段中的更改。

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

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

AppDatabase.getInstance(getContext()).getRecipeDao().getAllRecipes().getValue();
Run Code Online (Sandbox Code Playgroud)

我已经读过“如果响应是可观察的数据类型,例如Flowable或LiveData,Room会监视查询中引用的所有表是否无效”。

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

kan*_*idj 7

因此,在实现自己之后,我发现您需要做一些事情:

  1. 确保您有一个Observer更改LiveData
  2. observeForever(Observer<T> observer)除非您LiveCyclerOwner使用,否则需要致电,然后将其改为:observe (LifecycleOwner owner, Observer<T> observer)
  3. 最后,关于getValue()

返回当前值。请注意,在后台线程上调用此方法并不能保证将接收到最新的值集

重申一下,我认为您的方法行不通。

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

最后,我将建议一些超级简单的操作,例如为您的计算机添加新方法 Dao

@Query("SELECT * FROM recipes LIMIT 1")
Recipe getAnyRecipe();
Run Code Online (Sandbox Code Playgroud)

并执行此检查以查找null食谱表中是否存在任何内容。