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

1

doOnError()是一个“side-action”运算符,它不会捕获错误。应该是这样的:

query.flatMap(s -> getUser(s)).subscribe(result::onNext, this::onError);

于 2016-02-08T23:29:53.827 回答