База данных Android с комнатой не вызывает обратные вызовы - PullRequest
0 голосов
/ 13 мая 2018

У меня есть небольшая база данных с Android Room. Я хочу предварительно заполнить таблицы некоторыми данными, но не могу вызвать триггер с 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: создание базы данных, но не других. Я делаю это неправильно?

Ответы [ 2 ]

0 голосов
/ 29 сентября 2018

У меня была похожая проблема.OnCreare () не вызывается и, в свою очередь, не будет onOpen ().Это потому, что я никогда не использовал экземпляр, поэтому база данных не создавалась.

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

"... до тех пор, пока вы не выполните какую-то конкретную операцию, например, вызов @Dao метод, который попадает в базу данных, ваша база данных не будет создана. "

0 голосов
/ 13 мая 2018

Я считаю, что ваш getDatabaseSoundsInitializer возвращает ноль. Предполагая, что databaseObject является экземпляром класса, который расширяет RoomDatabase, оно должно быть:

if(databaseObject == null){
     Log.d(TAG, "Debug: Creating the database");
     databaseObject = Room.databaseBuilder(context, klass, name).addCallback(rdc).build();
 }
 return databaseObject;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...