Lý do tại sao OnCreate không được gọi là bởi vì nó chỉ được gọi một lần khi cơ sở dữ liệu được tạo lần đầu tiên và sau đó không bao giờ lặp lại miễn là cơ sở dữ liệu tồn tại.
Nếu bạn xóa dữ liệu của Ứng dụng hoặc gỡ cài đặt Ứng dụng rồi chạy lại, bạn sẽ thấy rằng onCreate sau đó được gọi.
ví dụ.
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();
}
Sau khi xóa dữ liệu của Ứng dụng, kết quả là:-
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.