我有一个带有Android Room的litte数据库。我想用一些数据预填充表,但我无法使用onCreate
或onOpen
methos 触发回调。
我有这样的单例模式的数据库:
public class DatabaseSoundsInitializer{
...
private static DatabaseSounds databaseObject;
public static DatabaseSounds getDatabaseSoundsInitializer(Context context, Class klass, String name){
if(databaseObject == null){
Log.d(TAG, "Debug: Creating the database");
databaseObject = (DatabaseSounds) Room.databaseBuilder(context, klass, name).addCallback(rdc).build();
}
return databaseObject;
}
static RoomDatabase.Callback rdc = new RoomDatabase.Callback() {
@Override
public void onCreate(@NonNull SupportSQLiteDatabase db) {
super.onCreate(db);
Log.d(TAG, "Debug: onCreate");
}
@Override
public void onOpen(@NonNull SupportSQLiteDatabase db) {
super.onOpen(db);
Log.d(TAG, "Debug: onOpen");
}
};
...
}
我从我的主要活动中调用它,如下所示:
DatabaseSounds db = DatabaseSoundsInitializer.getDatabaseSoundsInitializer(getApplicationContext(), DatabaseSounds.class, Utils.DATABASE_NAME);
这是我的数据库类:
public abstract class DatabaseSounds extends RoomDatabase{}
我可以看到带有调试的日志:创建数据库,但看不到其他数据库。我弄错了?
我也有类似的问题。onCreare(( 没有被调用,反过来 onOpen(( 也不会被调用。这是因为我从未实际使用该实例,因此没有创建数据库。
https://stackoverflow.com/a/47619844/3678942
"...在执行一些具体操作(例如调用访问数据库的 @Dao 方法(之前,不会创建数据库。
我相信你的getDatabaseSoundsInitializer
返回 null。假设databaseObject
是一个类的实例,该类RoomDatabase
它应该是:
if(databaseObject == null){
Log.d(TAG, "Debug: Creating the database");
databaseObject = Room.databaseBuilder(context, klass, name).addCallback(rdc).build();
}
return databaseObject;