如何从存储库类Room Database中的实时数据中获取值

时间:2018-11-17 21:46:14

标签: java android android-room android-livedata

我在我的应用程序中使用了Android Jet-pack的Room Architecture组件。我实现了Repository类,用于管理服务器和Room数据库中的数据,例如服务器。我正在使用实时数据来获取数据库中存在的所有对象的列表,并且在活动类中附加了一个Observer。一切正常,除了在致电我的服务器之前发生的一件事之外,我想检查房间中是否存在数据,如果房间中是否存在数据,我不想致电服务器以节省资源,但是当我尝试从存储库类中的本地数据库获取数据,它总是返回null我也尝试将观察者附加到它,但是没有用。

public LiveData<List<AllbrandsdataClass>> getAllBrands() {
    brandsDao.getallbrands().observeForever(new Observer<List<AllbrandsdataClass>>() {
        @Override
        public void onChanged(@Nullable final List<AllbrandsdataClass> allbrandsdataClasses) {
            final List<AllbrandsdataClass> listofbrandsobjectfromdb = allbrandsdataClasses;
            if (listofbrandsobjectfromdb == null) {
                Log.d(TAG, "Repository getallbrands number of brands in the DB is: 0");
            } else {
                // perform the logic to check and than fetch from server
            }
            return brandsDao.getallbrands();
        }
    }
}

这是我在接口类中的getAllBrands()方法,其注释为DAO

@Query("SELECT * FROM AllbrandsdataClass order by timeStamp  desc")
LiveData<List<AllbrandsdataClass>> getallbrands();

我想要的是在从服务器中获取数据之前,对本地数据库中的数据执行存储库类中的签入,但是如上所述,当使用实时数据时,我无法做到这一点

1 个答案:

答案 0 :(得分:0)

搜索了很长时间之后,我发现了这些资源。 1)有关概念概述,请观看下面的视频。 youtu.be/2rO4r-JOQtA?t=340

2)用于文档访问 https://developer.android.com/reference/android/arch/lifecycle/Transformations 一个简单的例子

getPointAttribute