gpt4 book ai didi

mvvm - RxJava - 主题中的错误处理

转载 作者:行者123 更新时间:2023-12-03 08:27:59 27 4
gpt4 key购买 nike

我正在尝试在 MVVM 中实现 ViewModel,将可观察对象作为“输入流”提供,将观察者作为“输出流”提供以供 View 绑定(bind)。

如果 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() 方法,而不将任何内容推送到登录和博客可观察对象?

最佳答案

doOnError()是一个“side-action”运算符,它不会捕获错误。应该是这样的:
query.flatMap(s -> getUser(s)).subscribe(result::onNext, this::onError);

关于mvvm - RxJava - 主题中的错误处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35280812/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com