2016-08-18 25 views
1

我有一個請求調用,如果用戶已訂閱了一個事件,可以返回200;如果用戶未訂閱,則返回204;如果事件不再存在,則返回404。Rx Android如何檢查204代碼改進2

我使用改進2和Observables來調用服務器。

如何檢查我是否有代碼200或204?

如果我有404我知道這是一個錯誤,我很容易處理它,但我的迴應是不同的我不知道如何得到實際的代碼。

mApiEvents.isSubscribed(idEvent, uniqueId) 
       .subscribeOn(Schedulers.io()) 
       .observeOn(AndroidSchedulers.mainThread()) 
       .compose(getLifecycleProvider()) 
       .flatMap(data-> { 

        return ?? //How do I check if I got 200 or 204? 

       } 
       .subscribe(new LifecycleObserver<Boolean>(){ 

        @Override 
        public void onNext(Boolean aBoolean) {  
        } 

        @Override 
        public void onError(Throwable e) { 

         //404 or another error 
        } 
       } 
     ) 

回答

1

我終於找到了它,最後解決方案非常簡單。我們不得不使用Retrofit2 Response類來封裝我們的數據。

https://square.github.io/retrofit/2.x/retrofit/retrofit2/Response.html

@POST("some/endpoint") 
Observable<Response<Data>> getData(...) 

那麼我們就可以用flatMap操縱它並檢查Code

getData() 
    .... 
    .flatMap(response -> { 
     if(response.code() == 200) 
     //do something 
     else 
     //do something else 
    } 
1

不是真的,你問什麼,但你可以檢查的isEmpty(),因爲作爲204的身體是空的,改造將不會發出任何項目,您會收到的onComplete沒有任何onNext。

+0

是的,但我怎麼查「的​​isEmpty」,我想我不得不使用一個響應對象,不是嗎?事實上,如果我有幾個20倍的迴應,檢查是否爲空將不會如此有用。 –