首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Android数据库有房间不会触发回调

Android数据库有房间不会触发回调
EN

Stack Overflow用户
提问于 2018-05-13 22:57:05
回答 2查看 3.8K关注 0票数 1

我有一个Android房间的小数据库。我想用一些数据预填充表,但无法使用onCreateonOpen方法触发回调

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

代码语言:javascript
复制
    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");
        }
    };
...
}

我从我的主要活动中调用它,如下所示:

代码语言:javascript
复制
DatabaseSounds db = DatabaseSoundsInitializer.getDatabaseSoundsInitializer(getApplicationContext(), DatabaseSounds.class, Utils.DATABASE_NAME);

下面是我的数据库类:

代码语言:javascript
复制
public abstract class DatabaseSounds extends RoomDatabase{}

我可以用Debug看到日志:创建数据库,但不能创建其他数据库。我做错了吗?

EN

回答 2

Stack Overflow用户

发布于 2018-09-30 02:28:40

我也遇到过类似的问题。onCreare()没有被调用,反过来onOpen()也不会被调用。这是因为我从未实际使用过该实例,因此没有创建数据库。

https://stackoverflow.com/a/47619844/3678942

...until如果您执行某些具体操作,如调用@Dao方法命中数据库,则不会创建数据库。

票数 9
EN

Stack Overflow用户

发布于 2018-05-13 23:04:54

我相信你的getDatabaseSoundsInitializer返回null。假设databaseObject是一个扩展RoomDatabase的类的实例,它应该是:

代码语言:javascript
复制
if(databaseObject == null){
     Log.d(TAG, "Debug: Creating the database");
     databaseObject = Room.databaseBuilder(context, klass, name).addCallback(rdc).build();
 }
 return databaseObject;
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50317428

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档