switchIfEmpty立即在RxAndroid中调用它的方法

时间:2019-04-01 09:43:33

标签: android rx-android android-mvp

在我的登录活动中,当用户首先输入用户名和密码时,我检查了本地数据库(Room),如果用户在数据库内部没有任何用户信息,我想使用Web服务进行检查,因此我按顺序在存储库中编写了以下代码:

@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,由于此方法尚未完成,我得到了空值。

我想让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();
            });
}

你的想法是什么?

0 个答案:

没有答案