2016-01-26 5 views
11

Je veux mettre en œuvre une demande multiple parallèle Retrofit 2. Je la structure suivante pour faire 3 demande:Exécuter requête HTTP en parallèle avec Retrofit 2

HistoricalRApi.IStockChart service=HistoricalRApi.getMyApiService(); 
     //^BVSP,^DJI,^IXIC 
     Call<HistoricalDataResponseTimestamp> call1= service.get1DHistoricalDataByStock("^IXIC"); 
     Call<HistoricalDataResponseTimestamp> call2= service.get1DHistoricalDataByStock("^DJI"); 
     Call<HistoricalDataResponseTimestamp> call3= service.get1DHistoricalDataByStock("^GSPC"); 
     call1.enqueue(retrofitCallbackAmerica()); 
     call2.enqueue(retrofitCallbackAmerica()); 
     call3.enqueue(retrofitCallbackAmerica()); 
} 

J'ai lu que Retrofit1, lors de la définition du adaptateur reste on peut définir la demande parallèle avec .setExecutor comme ici:

RestAdapter adapter = new RestAdapter.Builder() 
       .setEndpoint(END_POINT) 
       .setLogLevel(RestAdapter.LogLevel.FULL) 
       .setExecutors(Executors.newFixedThreadPool(3), null) 
       .build(); 

Ma question est de savoir comment puis-je obtenir le même dans Retrofit 2? Merci à l'avance

+2

https://github.com/square/retrofit/issues/1259 – Breavyn

Répondre

13

Merci à Colin Gillespie lien que j'ai mis en œuvre ce que dit Jake Wharton et c'est le résultat:

public static IStockChart getMyApiService() { 
     OkHttpClient client=new OkHttpClient(); 
     Dispatcher dispatcher=new Dispatcher(); 
     dispatcher.setMaxRequests(3); 
     client.setDispatcher(dispatcher); 
     // OkHttpClient client = new OkHttpClient(); 
     // HttpLoggingInterceptor interceptor = new HttpLoggingInterceptor(); 
     // interceptor.setLevel(HttpLoggingInterceptor.Level.BODY); 
     // client.interceptors().add(interceptor); 
     if(myService ==null){ 
      Retrofit retrofit=new Retrofit.Builder() 
        .baseUrl("http://chartapi.finance.yahoo.com/") 
        .addConverterFactory(JsonpGsonConverterFactory.create()) 
        .client(client) 
        .build(); 
      myService=retrofit.create(IStockChart.class); 
      return myService; 
     } else { 
      return myService; 
     } 



    }