我有一个Android房间的小数据库。我想用一些数据预填充表,但无法使用onCreate
或onOpen
方法触发回调。
我有这样的单例模式的数据库:
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{}
我可以用Debug看到日志:创建数据库,但不能创建其他数据库。我做错了吗?
发布于 2018-09-30 02:28:40
我也遇到过类似的问题。onCreare()没有被调用,反过来onOpen()也不会被调用。这是因为我从未实际使用过该实例,因此没有创建数据库。
https://stackoverflow.com/a/47619844/3678942
...until如果您执行某些具体操作,如调用@Dao方法命中数据库,则不会创建数据库。
发布于 2018-05-13 23:04:54
我相信你的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;
https://stackoverflow.com/questions/50317428
复制相似问题