2016-08-08 3 views
-1

Я пытаюсь отправить сетевой запрос на api с использованием модификации, и когда я получу ответ, используйте часть этого ответа в другом вызове, я использовал call и rxjava как предложил, но я всегда второй запрос выполняется перед первым одинМодификация 2 последовательных Запросы, использующие асинхронные сетевые вызовы с повторением

public interface ChannelRequest { 

    @POST("authenticate_with_options") 
    @FormUrlEncoded 
    Observable<Channel> getAuthenticationChannel(@FieldMap Map<String, String> params); 


    @POST("check") 
    @FormUrlEncoded 
    Observable<Channel> getAuthenticationStatus(@FieldMap Map<String, String> params); 
} 

сс

 Observable<Channel> call2 = mAPI.gettheChannel().getAuthenticationStatus(Constants.HTTP.PARAMSAUTH); 
     Observable.interval(3, TimeUnit.SECONDS).retry(3); 
     Subscription subscription2 = call2 
       .subscribeOn(Schedulers.io()) // optional if you do not wish to override the default behavior 
       .observeOn(AndroidSchedulers.mainThread()).subscribe(new Subscriber<Channel>() { 


        @Override 
        public void onCompleted() { 


        } 

        @Override 
        public void onError(Throwable e) { 

         if (e instanceof HttpException) { 
          HttpException response = (HttpException) e; 
          int code = response.code(); 
         } 
        } 

        @Override 
        public void onNext(Channel channel) { 

         Log.d("AuthStatus", "onResponse: " + Channel.getChannel()); 

        } 
       }); 

Я не уверен, что если у меня есть больше, чтобы использовать RxJava, что бы быть лучшей практикой для достижения этой цели ?

Благодаря

ответ

0

Ваш код не похож на ваш вопрос (так как есть только один вызов к вашему API в вашем примере)

Тем не менее, вы можете посмотреть на операторе flatMap вызвать другие наблюдаемый, с результатом предыдущего вызова.

mAPI.gettheChannel().getAuthenticationStatus(Constants.HTTP.PARAMSAUTH) 
        // use the result from a previous call to perform another one 
        .flatMap(result -> mApi.gettheChannel().getAuthentificationChannel(result)) 
        .subscribeOn(Schedulers.io()) // optional if you do not wish to override the default behavior 
        .observeOn(AndroidSchedulers.mainThread()) 
        .subscribe(); 
+0

Я сделал это ниже, не так ли? '.flatMap (новый Func1 >() { @Override общественного Наблюдаемые Вызов (AccepttoChannel accepttoChannel) { // Строка маркер = ... // TODO экстракт маркер. Constants.HTTP.PARAMSAUTH.put ("канал", accepttoChannel.getChannel()); возвращение mAPI.getAccepttoChannel() getAuthenticationChannel (Constants.HTTP.PARAMSAUTH);. }} ) ' –

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