包含 Room 的 Android 数据库不会触发回调



我有一个带有Android Room的litte数据库。我想用一些数据预填充表,但我无法使用onCreateonOpenmethos 触发回调

我有这样的单例模式的数据库:

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;

最新更新