android - 如何销毁 Android Room Database 实例?
问题描述
我正在创建一个数据库,如下面的代码所示。
Room.databaseBuilder(MyApp.getInstance().getApplicationContext(), MyDatabase.class, "my-room-database").build();
当用户退出应用程序时,我想删除所有数据、表和数据库本身,因为存储的数据是该用户的个人数据。
在用户注销时,我尝试执行以下操作,但它不起作用。
public static void destroyInstance() {
if(petCareDatabase != null) {
petCareDatabase.clearAllTables();
}
petCareDatabase = null;
}
有人可以在需要时帮我找到清理数据库的正确方法。
解决方案
创建公共静态实例方法以使 db 实例为空
公共抽象类 DepotDatabase 扩展 RoomDatabase { 私有静态 AppDatabase 实例; 公共抽象 UserDao userDao(); 公共静态AppDatabase getAppDatabase(上下文上下文){ 如果(实例 == 空){ 实例 = Room.databaseBuilder(context.getApplicationContext(), AppDatabase.class,“用户数据库”) .allowMainThreadQueries()//这里要小心 。建造(); } 返回实例; } 公共静态无效销毁实例(){ 实例=空; } }
然后在主要活动或使用它的活动中
@覆盖 受保护的无效 onDestroy() { AppDatabase.destroyInstance(); super.onDestroy(); }
推荐阅读
- php - 使用串联写属性名
- algorithm - 找到给定序列中不出现的最小正整数
- android - 在应用程序处于后台或应用程序未运行时来电时,不会调用广播接收器
- angular - 如何在角度 6 中单击时更改 div 背景颜色
- ios - 视图上的动画 UIIMageView Alpha 确实加载了
- database - Wix.com 数据库:将单个字段中文本的多个部分引用到不同字段
- angular - .net core 2.1 + Angular 6 + http.post 没有到达控制器
- c# - Unity ARCore 触摸对象
- android - Android:如何用mediecodec解码视频(编码不生成文件)
- c# - 从 App_LocalResources 中的资源文件访问值到剃刀视图