В своей активности при входе в систему, когда пользователь сначала ввел имя пользователя и пароль, я проверил локальную базу данных (Комната), и если у пользователя нет какой-либо информации о пользователе в базе данных, я хочу проверить это с помощью веб-службы, поэтому в репозитории я написал следующие коды:
@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();
});
}
Какова ваша идея?