RxJava2 + Room:调用clearAllTables()后未将数据插入数据库

时间:2018-11-02 10:47:05

标签: android rx-java2 android-room

登录后,在我的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。

0 个答案:

没有答案