В коде я получил экземпляр из Room.databaseBuilder, добавил обратный вызов и, наконец, я построил базу данных.После вызова
this.mMovieDatabase =
this.mMovieDBPersistentBuilder.fallbackToDestructiveMigration().build();
я ожидал, что будут вызваны журналы внутри обратного вызова, но этого не произошло.Журналы внутри обратного вызова вызываются, когда вызывается insertTuplePersistentDB ().
мои вопросы:
1 - почему обратные вызовы не были вызваны
this.mMovieDatabase =
this.mMovieDBPersistentBuilder.fallbackToDestructiveMigration().build();
, когда этоСтрока была выполнена ??
2 - какова цель объекта db, предоставляемого в обратном вызове, и как их использовать? Она содержит такие методы, как
.update()
.delete()
.execSql()
code_1:
public void buildPersistentDB() {
Log.v(TAG_LOG, "->buildPersistentDB");
this.mMovieDBPersistentBuilder = Room
.databaseBuilder(getApplicationContext(),
MovieDatabase.class, ActMain.DATA_BASE_NAME);
this.mMovieDBPersistentBuilder.addCallback(new
RoomDatabase.Callback() {
@Override
public void onCreate(@NonNull SupportSQLiteDatabase db) {
super.onCreate(db);
Log.w(TAG_LOG + "->onCreate", " buildPersistentDB->DB is
created, all tables has been created");
Log.w(TAG_LOG + "->onCreate", " buildPersistentDB->DB
db.getPath(): " + db.getPath());
Log.w(TAG_LOG + "->onCreate", " buildPersistentDB->DB
db.toString(): " + db.toString());
Log.w(TAG_LOG + "->onCreate", " buildPersistentDB->DB
db.isOpen(): " + db.isOpen());
Log.w(TAG_LOG + "->onCreate", " buildPersistentDB->DB
db.isReadOnly(): " + db.isReadOnly());
}
@Override
public void onOpen(@NonNull SupportSQLiteDatabase db) {
super.onOpen(db);
Log.w(TAG_LOG + "->onOpen", "
buildPersistentDB->onCreate\n");
Log.w(TAG_LOG + "->onOpen", " buildPersistentDB->DB has been
opened");
}
});
this.mMovieDatabase =
this.mMovieDBPersistentBuilder.fallbackToDestructiveMigration().build();
}
private void insertTuplePersistentDB(int recordNum) {
Log.v(TAG_LOG, "->insertTuplePersistentDB is called. recodNum: " +
recordNum);
Movie movie = new Movie();
for (int i = 1; i <= recordNum; i++) {
movie.setMovieId(String.valueOf(i));
movie.setMovieName("Movie_episode_" + String.valueOf(i));
mMovieDatabase.dao().insertOnlySingleMovie(movie);
}
}