【问题标题】:Where can I get the exception throwed within the subscribe() method?我在哪里可以获得 subscribe() 方法中抛出的异常?
【发布时间】:2017-07-22 04:38:37
【问题描述】:

我正在使用 rxAndroid。
看了很多文档,还是没有找到解决办法,可能是我错过了, 所以请给我一个指导。 在这里,我创建了一个可能在 subscribe 方法中抛出异常的 observable。

return Observable.create(new ObservableOnSubscribe<Project>() {
            @Override
            public void subscribe(@NonNull ObservableEmitter<Project> e) throws Exception {
                e.onNext(projectRepository.readDetails(project.getId()));
                e.onComplete();
            }
        });

我使用存储库模式来获取项目详细信息, 但问题是所有存储库方法都可能引发异常,

projectRepository.readDetails(project.getId())

而且我无论如何也找不到处理方法subscibe()中抛出的异常,观察者的onError()不会得到任何通知。 p>

谢谢。

【问题讨论】:

    标签: exception observable reactive-programming rx-android rx-java2


    【解决方案1】:

    手动创建 observable 时,您必须捕获任何异常并将它们手动传递给onError()

    return Observable.create(new ObservableOnSubscribe<Project>() {
        @Override
        public void subscribe(@NonNull ObservableEmitter<Project> e) throws Exception {
            try {
                e.onNext(projectRepository.readDetails(project.getId()));
                e.onComplete();
            }
            catch (Exception ex) {
                e.onError(ex);
            }
        }
    });
    

    或者,您应该能够使用fromCallable() 来避免手动创建可观察对象:

    Observable.fromCallable(() -> projectRepository.readDetails(project.getId()));
    

    如果呼叫失败,这将发出onError() 的信号。

    【讨论】:

      猜你喜欢
      • 2013-02-08
      • 2017-01-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-03-10
      • 1970-01-01
      • 2010-11-22
      • 2019-01-15
      相关资源
      最近更新 更多