房间回调不应该删除此代码中的所有数据库吗?



我刚刚遵循了本指南: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数据。在代码中,它说";如果你想在应用程序重新启动时保留数据,请注释掉下面的块";上面的代码作为注释。

因此,当我关闭并重新启动应用程序时,我添加的单词应该被删除,我应该只看到";你好"以及";世界";。但当我关闭并重新启动应用程序时,我添加的单词仍然存在。我对这个应用程序的工作原理有什么误解吗?

为什么尽管我还没有注释掉代码,但数据仍能通过应用程序重新启动?

onCreate在数据库的生存期内只调用一次。也就是说,只有当数据库不存在并且需要创建时才会调用它。

如果卸载应用程序然后运行应用程序,则会调用onCreate,因为数据库随后会被删除。

  • https://developer.android.com/reference/androidx/room/RoomDatabase.Callback#onCreate(androidx.sqlite.db.SupportSQLiteDatabase(

也许您想覆盖onOpen方法,而不是on Create

  • https://developer.android.com/reference/androidx/room/RoomDatabase.Callback#onOpen(androidx.sqlite.db.SupportSQLiteDatabase(

相关内容

最新更新