【问题标题】:Execute http request in parallel with Retrofit 2与 Retrofit 2 并行执行 http 请求
【发布时间】:2016-06-18 17:45:08
【问题描述】:

我想在 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 中实现同样的效果?提前致谢

【问题讨论】:

标签: android retrofit2


【解决方案1】:

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



    }

【讨论】:

  • 如果用户离开应用程序或活动,您甚至可以获取调度程序并取消所有请求(挂起和执行)并节省资源。因为挂起的请求无论如何都会完成。 dispatcher.cancelAll()
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-10-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-11-23
  • 2017-05-30
相关资源
最近更新 更多