使用LiveData时检查RoomDatabase是否为空

时间:2018-02-06 22:36:21

标签: android dao android-room android-livedata

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

我第一次运行我的应用时,我从API获取数据,创建我的LiveData并存储我的数据。

我第二次运行我的应用程序时,我想检查我的DataBase是否为空。但是在使用AppDatabase.getInstance(getContext()).getRecipeDao().getAllRecipes().getValue(); 时:以下代码返回null。

f1

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

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

1 个答案:

答案 0 :(得分:7)

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

  1. 确保您对Observer
  2. 进行了LiveData更改
  3. 除非您使用observeForever(Observer<T> observer),否则需要致电LiveCyclerOwner,然后使用observe (LifecycleOwner owner, Observer<T> observer)
  4. 最后,getValue()
  5. 上有一个有趣的说明
      

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

    重申一下,我认为你的方法不起作用。

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

    我会推荐一些超级简单的东西,比如在Dao

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

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