switchIfEmpty немедленно вызвал его метод в RxAndroid - PullRequest
0 голосов
/ 01 апреля 2019

В своей активности при входе в систему, когда пользователь сначала ввел имя пользователя и пароль, я проверил локальную базу данных (Комната), и если у пользователя нет какой-либо информации о пользователе в базе данных, я хочу проверить это с помощью веб-службы, поэтому в репозитории я написал следующие коды:

@NonNull
public Single<User> getUser(String userName, String pass) {
    return Single.fromObservable(getUserFromLocal(userName, pass)
            .switchIfEmpty(getUserFromRemote(userName, pass)));
}

    private Observable<? extends User> getUserFromRemote(String userName, String pass) {
        //todo check service to user login
//        mreRemoteDataSource.login(userName, pass);
        return null;
    }

    private Observable<User> getUserFromLocal(String userName, String pass) {
        return mLocalDataSource.login(userName, pass);
    }

Но когда вызывается getUserFromLocal, приложение не ждет результата getUserFromLocal, и немедленно вызывается getUserFromRemote, и я получил значение NULL, поскольку этот метод еще не завершен.

Я хочу, чтобы, если getUserFromLocal вернул пустое объектное приложение, подключился к сервису, а затем проверил информацию о пользователе.

Это mLocalDataSource.login метод:

public Observable<User> login(String userName, String pass) {
    return userDao.getUser(userName, pass)
            .flatMapObservable(user -> {
                if (user != null)
                    return Observable.just(user);
                else return Observable.empty();
            });
}

Какова ваша идея?

...