SQLite
 sql >> Database >  >> RDS >> SQLite

onCreate() di RoomDatabase.Callback() non è stato chiamato dopo una chiamata riuscita a .build()

Il motivo per cui OnCreate non viene chiamato perché viene chiamato solo una volta quando il database viene creato per la prima volta e poi mai più finché il database esiste.

Se elimini i dati dell'app o disinstalli l'app e poi la esegui nuovamente vedrai che onCreate viene quindi chiamato.

per esempio.

private void BuildDatabase() {
   RoomDatabase.Builder roombuilder = Room.databaseBuilder(this, Database.class,"mydb");
   roombuilder.addCallback(new RoomDatabase.Callback() {
       @Override
       public void onCreate(@NonNull SupportSQLiteDatabase db) {
           super.onCreate(db);
           Log.d("ONCREATE","Database has been created.");
       }

       @Override
       public void onOpen(@NonNull SupportSQLiteDatabase db) {
           super.onOpen(db);
           Log.d("ONOPEN","Database has been opened.");
       }
   });
   mRoomDB = (Database) roombuilder.build();
}

Dopo aver eliminato i dati dell'app risulta in :-

2018-12-20 06:36:23.045 2271-2287/so53839431.so53839431roomrelationship D/ONCREATE: Database has been created.
2018-12-20 06:36:23.055 2271-2287/so53839431.so53839431roomrelationship D/ONOPEN: Database has been opened.