如何解决房间里的回调不应该删除这段代码中的所有数据库吗?
我刚刚遵循了本指南: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 方法。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。