MVVMパターンを使用したいアプリケーションを開発中です。現在、xmlのすべてのイベントは、ViewModelの横にそれらを渡すアクティビティによって処理されます。例えば。ユーザがログインボタンをクリックすると、イベントはアクティビティによって処理されます。このメソッドの中で、Observableを返すRxFirebase(FirebaseのRxラッパー)メソッドを呼び出し、それらにサブスクライブして返します。私は再びUIの更新を行うためにこの観察可能なものを購読しています。この状況を以下に示します。AndroidでのRxJavaとMVVMパターンによるエラー処理
私の質問は、このアプローチが正しいかどうかです。私の意見では、よりよい解決策はViewModelのエラーを処理することですが、どうすればUIを更新できますか?ソリューションの1つは、インターフェースを作成することです。 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();
}
});
}
のViewModel方法:
public Observable<AuthResult> onLoginClick() {
Observable<AuthResult> observable = RxFirebaseAuth.signInWithEmailAndPassword(mAuth, mEmail.get(), mPassword.get());
observable.subscribe(authResult -> {
//save user
}, throwable -> {
//handle error
});
return observable;
}
答えがあなたのニーズに合っていればいいと思いますが、コメントではなく、この場合はサンプルを伸ばしてください。 –