我已经创建了一个实体和相应的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的方法来做到这一点,但是这是一个好的实践吗?
发布于 2019-03-31 17:55:43
您可以通过调用dao.getAll()来获取liveData。但一般来说,不推荐这样做。您将从模型中获取liveData。查看此示例,了解处理数据的推荐方法和liveData的用法。https://github.com/googlesamples/android-architecture-components/tree/master/BasicSample
https://stackoverflow.com/questions/55443460
复制