2016-04-18 43 views
0

我的要求是這樣的。RxJava->根據條件進行API請求

  1. 擊中第一個API得到響應。在響應中,我有一個定義狀態的字段,如果設置了該標誌,則進行另一個API調用並與第一個結果合併。
  2. 如果未設置標誌,則返回實際響應(第一響應)。

如果我使用過濾器,它會忽略錯誤的項目,如果沒有設置標誌,我不想忽略當前的響應。

我們該如何使用RxJava,FlatMap和Filter?

+0

爲什麼標記爲無效?給我一個提示 ?? – sreekumar

回答

2

你不需要filter。只需檢查flatMap中的狀態。如果已設置,請觸發請求並撥打startWith將其與原始的一個連接(您可以用任何代碼替換startWith以合併結果)。如果沒有,請使用just來包裝響應。這裏有一個例子:

class MyResponse { 

    boolean status; 

    public MyResponse(boolean status) { 
     this.status = status; 
    } 

    public static Observable<MyResponse> request() { 
     return Observable.just(new MyResponse(false)); 
    } 
} 

Observable<MyResponse> response = Observable.just(new MyResponse(false)); 

response.first().flatMap(r -> { 
     if (r.status) { 
      return MyResponse.request().startWith(r); 
     } else { 
      return Observable.just(r); 
     } 
}); 
+0

真棒謝謝了很多...我也一樣:) – sreekumar

0

只需使用過濾器

RxHelper.toObservable(request1) 
     .filter(response1 -> response1.status == "200") 
     .flatMap(response1-> RxHelper.toObservable(request2)) 
     .map(response2 -> //Bla) 
    }); 
+0

這不是一個,我正在尋找,無論如何謝謝 – sreekumar