2016-05-11 10 views
0

Ich bin neu in RxJava, aber ich möchte es mit Retrofit 2 in meinem Android-Projekt versuchen. Anwendung unterstützt auth und alle Anfrage an Server muss enthalten Token in Headern, wenn Token nicht gültig Ich muss Auth Anfrage senden.Wie entscheidest du RxJava?

Das ist mein Api Schnittstelle

public interface ApiRx { 
 

 
    @FormUrlEncoded 
 
    @POST("auth") 
 
    Observable<AuthResponse> makeAuth(@FieldMap Map<String, String> fields); 
 

 
    @GET("update") 
 
    Observable<UpdateResponse> getUpdates(@Query("date") String date); 
 
}

Aber ich weiß jetzt nicht wie if-else-Anweisungen Rx zu organisieren und wenn Aktualisierungsanforderung ist nicht mit Auth Grunde, Auth Anfrage senden und dann die Update-Anfrage wiederholen.

Vielleicht hat jemand Simillar Fall, es wird nett sein, wenn Sie Beispiel zeigen, wie Sie diesen Fall realisieren. Sie

public interface ApiRx { 

    @FormUrlEncoded 
    @POST("auth") 
    Observable<Response<AuthResponse>> makeAuth(@FieldMap Map<String, String> fields); 

    @GET("update") 
    Observable<Response<UpdateResponse>> getUpdates(@Query("date") String date); 
} 

Auf diese Weise Zugriff auf die Server-Antwort haben, sowie die Daten

:

Antwort

2

Sie werden Ihre Rückkehr Typen Observable<Response<>> so wäre es besser dran ändern. Sobald Sie dies getan haben, können Sie die Anfragen etwas tun:

api.getUpdates(date) 
    .flatMap(new Func1<Response<UpdateResponse>, Observable<UpdateResponse>>() { 
     @Override 
     public Observable<UpdateResponse> call(Response<UpdateResponse> response) { 

      if (!response.isSuccess() && response.code() == 403) { 
       // return makeAuth(fields) 
       // .flatMap(save auth) 
       // .flatMap(return getUpdates) 
       // .flatMap(return Observable.just(response.body()) 
      } 
      else { 
       return Observable.just(response.body()); 
      } 

     } 
    }) 
    .subscribe(); 

Ich hatte ein bisschen vage in dem, wenn Auth nicht bestandenen Abschnitt sein, wie ich weiß nicht, wie Sie das System-Setup, aber es sollte geben Sie die richtige Idee.