我正在開發應用程序,其中我想使用MVVM模式。目前,來自xml的所有事件都由將它們傳遞到ViewModel旁邊的活動來處理。例如。用戶點擊登錄按鈕,事件由活動處理;現在這個活動調用視圖模型的方法,在這個方法裏面我調用了RxFirebase(Firebase上的Rx包裝),它返回Observable,訂閱它們並返回它;鑑於我再次訂閱這個可觀察的UI做更新。下面介紹了這種情況。在Android中使用RxJava和MVVM模式處理錯誤
我的問題是如果這種方法是正確的?在我看來,更好的解決方案是處理ViewModel中的錯誤,但我怎麼才能更新UI?其中一個解決方案是創建界面,例如ShowMessageListener,接下來將它傳遞給ViewModel並用來顯示消息,但我更喜歡將RxJava用於此。
查看方法:
public void onLoginClick(View view) {
mBinding.clProgress.setVisibility(View.VISIBLE);
mViewModel.onLoginClick().subscribe(authResult -> {
mBinding.clProgress.setVisibility(View.GONE);
startAnotherActivity();
}, throwable -> {
mBinding.clProgress.setVisibility(View.GONE);
if (throwable instanceof FirebaseApiNotAvailableException) {
Snackbar.make(mBinding.getRoot(), R.string.google_play_services_unavilable, Snackbar.LENGTH_LONG).show();
} else {
Snackbar.make(mBinding.getRoot(), throwable.getMessage(), Snackbar.LENGTH_LONG).show();
}
});
}
視圖模型方法:
public Observable<AuthResult> onLoginClick() {
Observable<AuthResult> observable = RxFirebaseAuth.signInWithEmailAndPassword(mAuth, mEmail.get(), mPassword.get());
observable.subscribe(authResult -> {
//save user
}, throwable -> {
//handle error
});
return observable;
}
希望答案符合您的需求,如果不僅僅是評論,在這種情況下生病擴大樣本。 –