我已经创建了一个实体以及相应的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的方法来做到这一点,但这是一个好习惯吗?关于这个问题,请帮我。
答案 0 :(得分:0)
您可以通过调用dao.getAll()获得liveData。但通常不建议这样做。您将从模型中获取liveData。请查看此样本,以获取推荐的数据处理方式和liveData的用法。 https://github.com/googlesamples/android-architecture-components/tree/master/BasicSample