2016-08-18 3 views
1

Ich habe einen Anfruf, der 200 zurückgeben kann, wenn ein Benutzer ein Ereignis abonniert hat, 204 wenn der Benutzer nicht abonniert ist oder 404, wenn das Ereignis nicht mehr vorhanden ist.Rx Android Wie überprüfe ich 204 Code in Retrofit 2

Ich benutze Retrofit 2 und Observables für den Aufruf des Servers.

Wie kann ich überprüfen, ob ich einen Code 200 oder 204 habe?

Wenn ich eine 404 habe, weiß ich, dass es ein Fehler ist und ich leicht damit umgehen, aber ich die Antwort ist anders, ich weiß nicht, wie man den tatsächlichen Code bekommt.

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 
        } 
       } 
     ) 

Antwort

1

Ich habe es endlich gefunden, am Ende ist die Lösung ziemlich geradlinig.

Wir müssen eine Retrofit2 Response-Klasse für das Wrapping unserer Daten verwenden.

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

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

dann können wir es mit einem flatMapmanipulieren und überprüfen Sie die Code

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

Nicht wirklich, was gefragt, aber Sie können isEmpty überprüfen(), weil, wie der Körper eines 204 leer ist, Retrofit wird ein Element nicht emittieren und Sie erhalten eine onComplete ohne OnNext erhalten.

+0

Ja, aber wie kann ich überprüfen „isEmpty“ Ich glaube, ich hatte eine Antwort zu verwenden Objekt dafür, oder? In der Tat, zu prüfen, ob leer ist, wird nicht so nützlich sein, wenn ich mehrere 20x Antworten hatte. –

Verwandte Themen