当前位置: 首页 > 知识库问答 >
问题:

RxJava-主题中的错误处理

屈翰飞
2023-03-14

我正在尝试在MVVM中实现一个ViewModel,提供可观察的东西作为“输入流”,提供观察者作为“输出流”供视图绑定。

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());
    }
}

共有1个答案

空俊语
2023-03-14

doonerror()是一个“辅助操作”运算符,它不捕获错误。应该类似于:

query.flatmap(s->getUser(s)).subscribe(result::OnNext,This::OnError);

 类似资料:
  • 我正在使用较新的RX java,而不是 如果一切正常的话,这段代码几乎可以完美地工作。但如果我故意犯了个错误,比如我关掉了WiFi。而不是改型获得“UnknownHostException”...因为它应该发生在try catch块中的reverfit调用(getUser)中。但它没有将错误处理到onError(Throwable t)-->(我可以处理的地方),而是使应用程序崩溃。这就像错误从未

  • 我有这个问题关于空数据库返回与房间和RxJava单一。我知道我的数据库是空的,所以我希望在触发时得到一个空的返回 问题是当我调用这个函数如下所示时 但仍然返回异常和崩溃 w/system.err:io.reactivex.exceptions.onerrornotimplementedexception:查询返回空结果集:SELECT*FROM Times WHERE timestamp=? 我在

  • 主要内容:RxJava Subjects主题 介绍,RxJava Subjects主题 类型RxJava Subjects主题 介绍 根据Reactive,一个 Subject 可以同时充当 Observable 和 Observer。 Subject 是一种桥接器或代理,在 ReactiveX 的某些实现中可用,它既充当观察者又充当 Observable。因为它是一个观察者,它可以订阅一个或多个 Observable,并且因为它是一个 Observable,它可以通过重新发送它们来传递

  • 嗨,我是RxJava和Kotlin的新手,我对它有一些概念。 我知道错误是很明显的。所以我知道缺少了什么,但我不知道的是如何处理这个错误。 我尝试添加:,但仍显示相同的错误消息。

  • 一般来说,Observable不会抛异常。它会调用 onError 终止Observable序列,以此通知所有的观察者发生了一个不可恢复的错误。 但是,也存在一些异常。例如,如果 onError 调用失败了,Observable不会尝试再次调用 onError 去通知观察者,它会抛出 RuntimeException,OnErrorFailedException 或者 OnErrorNotImpl

  • 问题内容: 我正在学习RxJava,并且在很多地方看到可以通过这种方式处理错误: 我是唯一认为这确实是错误代码的人吗?我该如何做得更好?我虽然使用了“访问”我的基本异常的每种具体类型的模式,但是方法始终需要一个;。您不能使用自己的基本异常。 问题答案: 错误处理程序: 您可以这样使用: