【问题标题】:NullPointerException in RxJava hot observable streamRxJava 热可观察流中的 NullPointerException
【发布时间】:2016-09-06 03:48:06
【问题描述】:

我有一个流,我正在观察用户选择的业务。当没有选择业务时,它应该发出null。这是一个 hot observable,所以它永远不会终止。

    @Override
    public Observable<Business> observeSelected() {
        return selectedDb.observe()
                .flatMap(businessId -> observe(businessId);
    }

这里有两个重要的方法调用

  1. Observable&lt;String&gt; selectedDb.observe()

返回所选业务的String businessId,如果没有选择业务,则返回null

  1. Observable&lt;Business&gt; observe(String businessId) 返回带有#1 的businessIdBusiness,如果没有找到具有指定ID 的业务,则返回null

如果#1 或#2 发出null,我希望整个方法发出一次null

显然,当#1 或#2 发出空值时,此代码将抛出NullPointerException。我可以用空检查乱扔上面的代码并发出空值,但这会使它变得非常难看。有没有办法用 RxJava 只捕获 NullPointer 异常?我可以使用.filter() 来防止发出空值,但我仍然想在未选择任何业务时发出onNext(null)

这里的最佳做法是什么?

【问题讨论】:

    标签: rx-java


    【解决方案1】:

    三元表达式似乎是最好的选择,虽然还是有点难看。

    @Override
    public Observable<Business> observeSelected() {
        return selectedDb.observe()
                .flatMap(businessId -> businessId != null ? observe(businessId) : Observable.just(null));
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-02-17
      • 1970-01-01
      相关资源
      最近更新 更多