登录后,在我的Android应用程序中,我将会话信息保存在Room中,然后从BE中检索用户信息并进行保存。 一切正常。我可以在数据库表中看到保存的信息。
用户从应用程序注销时,将通过appDatabase.clearAllTables()方法调用清除所有表。
要注意的是,在随后的登录时,数据库中没有插入任何信息,但是我的Rx调用没有引发任何错误。
我尝试使用日志记录和调试,但是一切看起来都很正常。
记录显示正在执行以下操作:登录->从BE获取用户信息->保存会话->保存用户。
调试时,我可以看到UserDao_Impl的insertUser()方法正在处理用户信息。
在应用程序中,我使用RxJava2 2.2.2版,Room Persistence库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());
}
更新(已解决问题):在此错误上浪费了一天。最后,了解其他一些库可能会影响Room使用应用程序的工作。原来,我用来查看设备上的数据库的 Android调试数据库库具有一个bug,该数据库在您通过帮助打开一次数据库后便会破坏数据库 >。
回到Stetho。