2016-05-11 4 views
0

Я новичок в RxJava, но хочу попробовать его с Retrofit 2 в моем проекте Android. Приложение поддерживает auth, и весь запрос на сервер должен содержать токен в заголовках, если токен недействителен, я должен отправить запрос auth.Как принять решение RxJava?

Это мой интерфейс Api

public interface ApiRx { 
 

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

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

Но я сейчас не как организовать if-оператор, использующие еще Rx и если запрос обновления завершается с Идентой причиной, отправить запрос аутентификации а затем повторите запрос на обновление.

Возможно, у кого-то есть simillar case, будет хорошо, если вы покажете пример, как реализовать этот случай.

ответ

2

Вы будете лучше изменив типы возврата к Observable<Response<>> поэтому было бы:

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

Таким образом, у вас есть доступ к ответу сервера, а также данным. После того, как вы сделали это, вы можете сделать что-то вроде запросов:

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(); 

Я должен был быть немного расплывчатым в разделе, если авторизация не удалась, поскольку я не знаю, как ваша система настроена, но она должна дать вам правильную идею.

Смежные вопросы