【发布时间】:2018-10-01 01:54:12
【问题描述】:
我是 rxjava、room 和 mvvm 架构的初学者。我正在尝试使用 Rxjava 从房间数据库中获取用户。
当我成功获得用户时,我想展示一个 toast 并开始另一个活动。如果失败,我将在文本输入布局中显示错误消息。
我已经尝试使用以下代码来做到这一点。
在我的Activity中,我有一个方法authorizeUser(),它在按钮点击时被调用。
private void authorizeUser() {
loginViewModel.checkInDb()
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(new CompletableObserver() {
@Override
public void onSubscribe(Disposable d) {
}
@Override
public void onComplete() {
Log.e("Action", "Complete");
showToast();
startAnotherActivity();
}
@Override
public void onError(Throwable e) {
Log.e("Action", "error");
showError();
}
});
}
在我的 ViewModel
public Completable checkInDb() {
Completable completable= Completable.fromAction(() ->
userDataSource.getSingleRecordFromName(name.get(), password.get())
.subscribe(new SingleObserver<User>() {
@Override
public void onSubscribe(Disposable d) {
isLoading.set(true);
}
@Override
public void onSuccess(User user) {
preference.save(Constants.CURRENT_USER, user)
.subscribe();
isLoading.set(false);
isComplete=true;
Log.e("got","success");
}
@Override
public void onError(Throwable e) {
isLoading.set(false);
passwordError.postValue(new Error("Username or password is incorrect"));
Log.e("got","failure");
isComplete=false;
}
}));
return completable;
}
在 UserDataSource 类中
public Single<User> getSingleRecordFromName(String strName) {
return daoAccess.getSingleRecord(strName);
}
在 DaoAccess 类
public Single<User> getSingleRecordFromName(String strName) {
return daoAccess.getSingleRecord(strName);
}
使用上面的代码,onComplete方法总是在activity中调用,view model中的天气,用户获取成功与否
但我想要做的是,我想在抛出错误时抛出错误或向活动发送通知(或在视图模型中调用 Error 方法)。这样我就可以在我的活动中显示错误。
我的问题可能很愚蠢,但我对此并不陌生。请帮我。
【问题讨论】:
标签: android mvvm rx-java2 android-databinding android-room