成功后在我的Android应用程序中login我将会话信息保存在 Room 中,然后从 BE 检索用户信息并保存它。
一切正常。我可以看到数据库表中保存的信息。
When 用户注销从应用程序中,所有表都通过 appDatabase.clearAllTables() 方法调用清除。
问题是在后续登录时,数据库中没有插入任何信息但我的 Rx 调用没有抛出任何错误。
我尝试使用日志记录和调试,但一切看起来都很正常。
日志记录显示正在执行的以下操作:登录 -> 从 BE 获取用户信息 -> 保存会话 -> 保存用户。
调试时,我可以看到用户信息正在 UserDao_Impl 的 insertUser() 方法中处理。
在应用程序中,我使用 RxJava2 版本 2.2.2、Room 持久性库版本 1.1.1、Dagger 版本 2.19 提供依赖项。
这是我的代码片段:
LoginUserUseCase.java
public Completable execute(@NonNull LoginInfo loginInfo) {
Completable loginAndSaveSession = sessionRepository.loginUser(loginInfo)
.flatMapCompletable(
session -> sessionRepository.saveSession(
session));
Completable getAndSaveUserInfo = userRepository.getRemoteUserInfo()
.flatMapCompletable(
user -> userRepository.saveUser(
user));
return loginAndSaveSession.andThen(getAndSaveUserInfo);
}
UserRepository.java
public Completable saveUser(@NonNull User user) {
return Completable.fromAction(() -> userDao.insertUser(user));
}
UserDao.java
@Insert(onConflict = OnConflictStrategy.REPLACE)
void insertUser(User user);
LogoutUserUseCase.java
public Completable execute() {
return Completable.fromAction(() -> appDatabase.clearAllTables());
}
更新(问题已解决):在这个 bug 上浪费了一天的时间。最后了解到其他一些库可能会影响应用程序与 Room 的工作。结果发现Android 调试数据库库我曾经用来查看设备上的数据库has a bug https://github.com/amitshekhariitbhu/Android-Debug-Database/issues/137在您使用它的帮助打开一次数据库后,它会破坏数据库.
回到斯特索。