14

Retrofit 2で複数の並列リクエストを実装したい.3つのリクエストを行うには、次の構造があります。

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

Retrofit1 で、残りのアダプターを定義するときに、次のように .setExecutor で並列リクエストを定義できることを読みました。

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

私の質問は、Retrofit 2 で同じことを達成するにはどうすればよいですか? 前もって感謝します

4

1 に答える 1

21

Colin Gillespie リンクのおかげで、Jake Wharton の言うことを実装しました。結果は次のとおりです。

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



    }
于 2016-01-26T11:27:18.937 に答える