RxJava2 + Room: данные не вставляются в БД после вызова clearAllTables () - PullRequest
0 голосов
/ 02 ноября 2018

В моем приложении для Android после успешного входа в систему Я сохраняю информацию о сеансе в Room, затем извлекаю информацию о пользователе из BE и сохраняю ее. Все отлично работает Я могу видеть сохраненную информацию в таблицах базы данных.

Когда пользователь выходит из приложения , все таблицы очищаются с помощью вызова метода appDatabase.clearAllTables ().

Загвоздка в том, что при последующем входе в систему нет информации, которая вставляется в DB , но мои вызовы Rx не выдают никаких ошибок.

Я пытался использовать ведение журнала и отладку, но все выглядит нормально.

В журнале отображаются следующие выполняемые действия: войти в систему -> получить информацию о пользователе из BE -> сохранить сеанс -> сохранить пользователя.

При отладке я вижу, что информация о пользователе обрабатывается в методе insertUser () UserDao_Impl.

В приложении я использую RxJava2 версии 2.2.2, Библиотеку персистентности помещения версии 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 , которую я использовал для просмотра базы данных на устройстве , имеет ошибку , которая разрушает БД после того, как вы однажды открыли ее с ее помощью .

Возвращаясь к Стето.

...