在我的登录活动中,当用户首先输入用户名和密码时,我检查了本地数据库(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();
});
}
你的想法是什么?