2016-09-05 94 views
-1

我有觀察用戶所選業務的流。如果沒有選擇業務,它應該發出null。這是一個熱門的可觀察所以它不應該終止。RxJava熱觀察流中的NullPointerException

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

有沒有被選擇的業務的兩個重要方法調用這裏

  1. Observable<String> selectedDb.observe()

返回所選業務的String businessId,或null

  • Observable<Business> observe(String businessId) 如果具有指定ID號的業務發現返回Business與#1的businessId,或null
  • 如果#1或#2發射null,我希望整個方法一次發出null

    顯然,當#1或#2發出空值時,此代碼將拋出NullPointerException。我可以用空檢查來清除上面的代碼併發出null,但這會使它非常難看。有沒有辦法只用RxJava捕獲NullPointer異常?我可以用.filter()防止空被髮出,但我還是想沒有選擇企業時發出的onNext(null)

    這裏最好的做法是什麼?

    回答

    1

    三元表達似乎是最好的選擇,雖然還是有點難看。

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