2016-08-08 76 views
-1

Ich versuche, eine Netzwerkanforderung an eine API mit Retrofit zu senden, und wenn ich zurück Antwort, verwenden Sie einen Teil dieser Antwort in einem anderen Anruf, ich verwendete Anruf und RXJAVA als vorgeschlagen, aber ich die zweite Anfrage vor dem erstenNachrüstung von 2 sequentiellen Anfragen mit asynchronen Netzwerkanrufen mit Wiederholung

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

ss

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

        } 
       }); 

ich bin nicht sicher, ob ich RxJava verwenden müssen mehr ausgeführt immer haben, was die beste Praxis dies zu erreichen wäre ?

Dank

Antwort

0

Ihr Code nicht wie Ihr Problem sieht

Dennoch

(da es nur einen Anruf zu Ihrem api in Ihrem Beispiel ist), können Sie an den Betreiber suchen flatMap andere beobachtbare zu nennen, mit dem Ergebnis eines vorherigen Anrufs.

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

Ich tat dies die unten, würde es funktionieren? '.flatMap (neu Func1 >() { @Override öffentlich beobachtbare call (AccepttoChannel accepttoChannel) {// String Token = ... // TODO Extrakt Token. Constants.HTTP.PARAMSAUTH.put ("Kanal", accepttoChannel.getChannel()); return mAPI.getAccepttoChannel() getAuthenticationChannel (Constants.HTTP.PARAMSAUTH). } }) ' –