2016-09-05 2 views
-1

Ich habe einen Stream, wo ich beobachtete das ausgewählte Geschäft des Benutzers. Es sollte null ausgeben, wenn kein Geschäft ausgewählt ist. Dies ist eine heiße beobachtbare, so dass es nie enden sollte.NullPointerException in RxJava heißen beobachtbaren Stream

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

Es gibt zwei wichtige Methode

  1. Observable<String> selectedDb.observe()

kehrt die String businessId des ausgewählten Unternehmen hier nennt, oder null wenn kein Geschäft ausgewählt ist.

  1. Observable<Business> observe(String businessId) kehrt die Business mit # 1 businessId oder null wenn kein Geschäft mit dem angegebenen ID gefunden wird

Wenn # 1 oder # 2 null emittieren, ich möchte die gesamte Methode null einmal ausgeben.

Offensichtlich wird dieser Code NullPointerException werfen, wenn # 1 oder # 2 Nullen ausgeben. Ich könnte den obigen Code mit Null-Checks verschütten und null ausgeben, aber das würde es sehr hässlich machen. Gibt es eine Möglichkeit, nur NullPointer-Ausnahmen mit RxJava abzufangen? Ich könnte .filter() verwenden, um zu verhindern, dass Nullen ausgegeben werden, aber ich möchte immer noch einen onNext(null) ausgeben, wenn kein Geschäft ausgewählt ist.

Was ist die beste Vorgehensweise hier?

Antwort

1

Ein ternärer Ausdruck scheint die beste Wette zu sein, obwohl immer noch ein wenig hässlich.

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