Я создал MovieDatabase, используя Room Persisdent lib.Согласно документации метода onCreate () в RoomDatabase.Callback, onCreate () вызывается после первого создания базы данных и создания всех таблиц.
Что произошло после того, как я вызвал buildPersistentDB (), я получил журналы из класса MoviesDatabase, класса, который аннотирован @Database, но журналы из onCreate () в RoomDatabase.Callback никогда не вызывались, несмотря на мой вызов:
this.mMovieDatabase = this.mMovieDBPersistentBuilder.fallbackToDestructiveMigration().build();
Способ, который я создалбаза данных четко показана в методе buildPersistentDB ().Я также опубликовал класс MovieDatabase, как показано ниже.
Я хотел бы знать, почему я не получил журналы от метода onCreate () в Room.Callback, несмотря на то, что база данных была успешно создана
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.v(TAG_LOG + "->onCreate", " buildPersistentDB->DB is created, all tables has been created");
Log.d(TAG_LOG + "->onCreate", " buildPersistentDB->DB db.getPath(): " + db.getPath());
Log.d(TAG_LOG + "->onCreate", " buildPersistentDB->DB db.toString(): " + db.toString());
Log.d(TAG_LOG + "->onCreate", " buildPersistentDB->DB db.isOpen(): " + db.isOpen());
Log.d(TAG_LOG + "->onCreate", " buildPersistentDB->DB db.isReadOnly(): " + db.isReadOnly());
}
@Override
public void onOpen(@NonNull SupportSQLiteDatabase db) {
super.onOpen(db);
Log.v(TAG_LOG + "->onOpen", " buildPersistentDB->onCreate");
Log.d(TAG_LOG + "->onOpen", " buildPersistentDB->DB has been opened");
}
});
this.mMovieDatabase = this.mMovieDBPersistentBuilder.fallbackToDestructiveMigration().build();
Log.d(TAG_LOG + "->buildPersistentDB", "->this.mMovieDatabase.isOpen(): " + this.mMovieDatabase.isOpen());
}//eof-buildPersistentDB
code_2 :
//class - The abstract class which is annotated with Database and extends RoomDatabase.
@Database(entities = {Movie.class}, version = 1, exportSchema = false)
public abstract class MovieDatabase extends RoomDatabase {
private final static String TAG_LOG = MovieDatabase.class.getSimpleName();
public abstract IDatabaseAccessObject dao();
public MovieDatabase() {
super();
Log.w(TAG_LOG, "->MovieDatabase constructor is called.");
}
@Override
public void init(@NonNull DatabaseConfiguration configuration) {
super.init(configuration);
Log.w(TAG_LOG, "->init is called.");
}
@NonNull
@Override
public SupportSQLiteOpenHelper getOpenHelper() {
Log.w(TAG_LOG, "->init is called.");
return super.getOpenHelper();
}
@NonNull
@Override
protected SupportSQLiteOpenHelper createOpenHelper(DatabaseConfiguration config) {
Log.w(TAG_LOG, "->createOpenHelper is called.");
Log.d(TAG_LOG, "->createOpenHelper->config.name:" + config.name);
Log.d(TAG_LOG, "->createOpenHelper->config.callbacks:" + config.callbacks);
Log.d(TAG_LOG, "->createOpenHelper->config.requireMigration:" + config.requireMigration);
return null;
}
@NonNull
@Override
protected InvalidationTracker createInvalidationTracker() {
Log.w(TAG_LOG, "->createInvalidationTracker is called.");
return null;
}
@Override
public void clearAllTables() {
Log.w(TAG_LOG, "->clearAllTables is called.");
}
}
logcat :
2018-12-13 14:37:54.665 8949-8949 V/ActMain: ->initPersistentDBHandlerThread <-
2018-12-13 14:37:54.666 8949-8949 V/ActMain->RoomPersistentDBHandlerThread: RoomPersistentDBHandlerThread constructor is called.
2018-12-13 14:37:54.666 8949-8949 V/ActMain->RoomPersistentDBHandlerThread: initHandler is called
2018-12-13 14:37:54.667 8949-8967 V/ActMain->RoomPersistentDBHandlerThread: onLooperPrepared is called. [getLooper: Looper (ROOM_PERSISTENT_DB_HANDLER_THREAD, tid 356) {cbd0ffd}] ++++++++++++++++++++++++
2018-12-13 14:37:54.667 8949-8967 V/ActMain->RoomPersistentDBHandlerThread: ++++++++++++++++++++++++ [getLooper: Looper (ROOM_PERSISTENT_DB_HANDLER_THREAD, tid 356) {cbd0ffd}] ++++++++++++++++++++++++
2018-12-13 14:37:54.670 8949-8949 V/ActMain->RoomPersistentDBHandlerThread: enqueueMessage is called for what = 1
2018-12-13 14:37:54.670 8949-8967 V/ActMain->RoomPersistentDBHandlerThread: handleMessage is called for msg.what = 1
2018-12-13 14:37:54.670 8949-8967 V/ActMain: ->buildPersistentDB <-
2018-12-13 14:37:54.673 8949-8967 W/MovieDatabase: ->MovieDatabase constructor is called. <-
2018-12-13 14:37:54.673 8949-8967 W/MovieDatabase: ->init is called. <-
2018-12-13 15:02:54.802 9384-9403 D/ActMain->buildPersistentDB: ->this.mMovieDatabase.isOpen(): false