RxJava热可观察流中的NullPointerException

时间:2016-09-05 19:47:09

标签: rx-java

我有一个流,我正在观察用户选择的业务。如果没有选择任何业务,它应该发出null。这是一个热门观察,因此它永远不会终止。

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

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

  1. Observable<String> selectedDb.observe()
  2. 返回所选商家的String businessId,如果未选择商家,则返回null

    1. Observable<Business> observe(String businessId) 如果没有找到具有指定ID的商家,则返回带有#1的Business的{​​{1}}或businessId
    2. 如果#1或#2发出null,我希望整个方法一次发出null

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

      这里的最佳做法是什么?

1 个答案:

答案 0 :(得分:1)

三元表达似乎是最好的选择,尽管仍然有点难看。

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