【发布时间】:2018-06-25 03:26:47
【问题描述】:
我正在使用 RoomDatabase 开发一个需要预先填充其数据的应用程序;我已经设法通过添加onCreate() 回调来做到这一点,但只有在第一次访问数据库时才会调用它(比如调用一个 Daos 函数)。
有什么方法可以强制创建数据库而不进行任何读写操作?
这是我的代码,MyDatabase.get() 在 App.onCreate() 中被调用
@Database(entities = {Entity1.class, Entity2.class}, version = 1, exportSchema = true)
public abstract class MyDatabase extends RoomDatabase {
private static MyDatabase sInstance;
public synchronized static TaxCodeDatabase get(Context context) {
if (sInstance == null) {
sInstance = buildDatabase(context);
}
return sInstance;
}
private static MyCodeDatabase buildDatabase(final Context context) {
return Room.databaseBuilder(context,
MyCodeDatabase.class,
"my-database")
.addCallback(new Callback() {
@Override
public void onCreate(@NonNull SupportSQLiteDatabase db) {
super.onCreate(db);
sInstance.preFillData(context);
});
}
})
.build();
}
public abstract Entity1Dao entity2Dao();
public abstract Entity2Dao entity1Dao();
/**
* Populates the database with a series of initial data
*
* @param aContext
*/
public void prePopulateData(Context aContext) {
//Populate database here
}
【问题讨论】:
-
为什么不创建
Application的子类并在该部分调用您的MyDatabase单例?注意 onCreate 只会被调用一次,除非你删除你的数据库。 -
因为在一个单独的模块中,我不想在其他地方有另一个实例
标签: java android android-room