问题描述
我刚刚遵循了本指南:https://developer.android.com/codelabs/android-room-with-a-view#12
(不仅是第 12 页,而是从 1 到 17 页)。
private static RoomDatabase.Callback sRoomDatabaseCallback = new RoomDatabase.Callback() {
@Override
public void onCreate(@NonNull SupportsqliteDatabase db) {
super.onCreate(db);
// If you want to keep data through app restarts,// comment out the following block
databaseWriteExecutor.execute(() -> {
// Populate the database in the background.
// If you want to start with more words,just add them.
WordDao dao = INSTANCE.wordDao();
dao.deleteall();
Word word = new Word("Hello");
dao.insert(word);
word = new Word("World");
dao.insert(word);
});
}
};
这是 RoomDatabse 类的链接: https://github.com/googlecodelabs/android-room-with-a-view/blob/master/app/src/main/java/com/example/android/roomwordssample/WordRoomDatabase.java
由于回调内部有 dao.deletaAll() 函数,它删除所有 sql 数据。在代码中它说“如果您想通过应用程序重新启动保留数据,请注释掉以下代码块”作为注释。
所以当我关闭并重新启动应用程序时,我添加的词应该被删除,我应该只看到“Hello”和“World”。但是当我关闭并重新启动应用程序时,我添加的词仍然存在。我对应用的工作方式有什么误解吗?
为什么我没有注释掉代码,但应用程序重启后数据仍然存在?
解决方法
onCreate 在数据库的生命周期内仅被调用一次。即只有在数据库不存在需要创建时才会调用。
如果您卸载该应用程序然后运行该应用程序,则将调用 onCreate,因为随后将删除数据库。
也许您想覆盖 onOpen 方法而不是 onCreate 方法。