See*_*eef 5 android rx-java2 android-room
所以我试图在用户注销时完全清除我的表,但删除表似乎没有坚持,当另一个用户登录时旧数据仍然存在。我正在使用 RXJava Completables 和 Room,我的代码类似于以下内容.
mDbManager.deleteAllFromTable(mCompositeDisposable)
.doOnComplete(new Action() {
@Override
public void run() {
//Finish logging out.
}
})
.subscribe();
Run Code Online (Sandbox Code Playgroud)
管理器中的方法看起来像
@Override
public Completable deleteAllFromTable(final CompositeDisposable compositeDisposable) {
return Completable.fromAction(new Action() {
@Override
public void run() {
mContactDao.deleteAllFromTable();
vacuumTables(compositeDisposable);
}
}).subscribeOn(mSchedulerProvider.io())
.observeOn(mSchedulerProvider.ui());
}
Run Code Online (Sandbox Code Playgroud)
Dao 中的方法看起来像
@Query("DELETE FROM table")
void deleteAllFromTable();
Run Code Online (Sandbox Code Playgroud)
我已经尝试过,没有清理数据库并将查询标记为事务,并为删除创建一个抽象方法,该方法也清理表并将其标记为事务,但数据仍然存在,并且在 doOnComplete 时删除未完成叫。我想指出的另一件事是,当从表中删除时,还有其他表的数据由外键链接,这些表也被删除。
除了手动删除表中的所有记录之外,您还可以使用RoomDatabase.clearAllTables()从注册到该数据库的所有表中删除所有行的方法entities()。
有关更多详细信息,请参阅此 https://developer.android.com/reference/android/arch/persistence/room/RoomDatabase.html#clearAllTables()
小智 8
在数据库中
fun clearTables() {
GlobalScope.launch(Dispatchers.IO) {
this@YourDataBase.clearAllTables()
}
}
Run Code Online (Sandbox Code Playgroud)
调用ViewModel中的函数
YourDataBase.getInstance(mContext).clearTables()
Run Code Online (Sandbox Code Playgroud)
从扩展 Roomdatabase 的类中调用clearAllTables() 方法,该方法从作为Entity() 注册到该数据库的所有表中删除所有行。
检查此处的文档 https://developer.android.com/reference/android/arch/persistence/room/RoomDatabase
| 归档时间: |
|
| 查看次数: |
13248 次 |
| 最近记录: |