如何获取或观察房间数据库类中的实时数据

时间:2019-03-31 17:20:27

标签: android mvvm android-room android-livedata

我已经创建了一个实体以及相应的dao。在dao类中,我有以下方法:

@Query("select * from Book")
LiveData<List<Book>> getAll();

我在活动和片段中观察到了这些实时数据。现在,我想在数据库打开其连接时获取图书清单。我想在会议室数据库类中执行此操作。其实在onOpen()方法中。

public abstract class AppDatabase extends RoomDatabase {
...
    public static synchronized AppDatabase getInstance(Context context) {
        if (instance == null) {
            instance = Room.databaseBuilder(context.getApplicationContext(),
                    AppDatabase.class, DATABASE_NAME)
                    .fallbackToDestructiveMigration()
                    .addCallback(roomCallback)
                    .build();
        }
        return instance;
    }
...
    private static RoomDatabase.Callback roomCallback = new 
        RoomDatabase.Callback() {
        @Override
        public void onCreate(@NonNull SupportSQLiteDatabase db) {
            super.onCreate(db);
            new PopulateDbAsyncTask(instance).execute();
        }

        @Override
        public void onOpen(@NonNull SupportSQLiteDatabase db) {
            super.onOpen(db);
            // get book list information and do some task
        }
    };
}

我正在遵循android mvvm架构模式。我现在有一些疑问。是否可以获取值或观察onOpen()方法中的livedata(book)?我知道我可以通过在dao类中编写另一个不返回livedata的方法来做到这一点,但这是一个好习惯吗?关于这个问题,请帮我。

1 个答案:

答案 0 :(得分:0)

您可以通过调用dao.getAll()获得liveData。但通常不建议这样做。您将从模型中获取liveData。请查看此样本,以获取推荐的数据处理方式和liveData的用法。 https://github.com/googlesamples/android-architecture-components/tree/master/BasicSample