0

ビューをバインドするために、オブザーバブルを「入力ストリーム」として、オブザーバーを「出力ストリーム」として提供する、MVVM に ViewModel を実装しようとしています。

以下のコードは、getUser() 呼び出しが成功した場合は機能するように見えますが、失敗した場合はキャッチされていない例外をスローします。

public class ViewModel {

    private final BehaviorSubject<String> query;
    private final BehaviorSubject<User> result;

    public ViewModel() {
        result = BehaviorSubject.create();
        query = BehaviorSubject.create();
        query.flatMap(s -> getUser(s)).subscribe(result);

        //  result = result.doOnError(e -> onError(e));    //  does not work
    }

    Observable<String> login() {
        return result.map(user -> user.getLogin());
    }

    Observable<String> blog() {
        return result.map(user -> user.getBlog());
    }

    public Observer<String> queryObserver() {
        return query;
    }

    private void onError(Throwable e) {
        Log.e(TAG, e.getMessage());
    }
}

ログインやブログのオブザーバブルに何もプッシュせずに、エラーが発生した場合に onError() メソッドを実行するにはどうすればよいですか?

4

1 に答える 1