2016-08-18 2 views
2

Я хочу изменить тайм-аут чтения на OkHttp-клиент, используя модификацию для одного вызова api. Чтобы быть ясным, у меня есть одна конечная точка, которая может занять очень много времени, мне нужно увеличить время ожидания и только тайм-аут для этого одного вызова api. Есть ли способ сделать это через аннотации? Есть ли способ сделать это без изменения тайм-аутов для остальной части приложения?Изменение времени ожидания изменения настроек для одного вызова api

ответ

0

Вы действительно можете сделать в конфигурации вызова

Copy строитель по умолчанию и сделать еще один клиент

private final OkHttpClient client = new OkHttpClient(); 

    public void run() throws Exception { 
    Request request = new Request.Builder() 
     .url("http://blah_blah_api.com/") // This URL is served with a 1 second delay. 
     .build(); 

    try { 
     // Copy to customize OkHttp for this request. 
     OkHttpClient copy = client.newBuilder() 
      .readTimeout(500, TimeUnit.MILLISECONDS) 
      .build(); 

     Response response = copy.newCall(request).execute(); 
     System.out.println("Response 1 succeeded: " + response); 
    } catch (IOException e) { 
     System.out.println("Response 1 failed: " + e); 
    } 

    try { 
     // Copy to customize OkHttp for this request. 
     OkHttpClient copy = client.newBuilder() 
      .readTimeout(3000, TimeUnit.MILLISECONDS) 
      .build(); 

     Response response = copy.newCall(request).execute(); 
     System.out.println("Response 2 succeeded: " + response); 
    } catch (IOException e) { 
     System.out.println("Response 2 failed: " + e); 
    } 
    } 
+0

Я использую модификацию с кинжалом-2, любым способом решения этой проблемы без создания именованных переменных для OkHttp? – Ali

+0

Я не работал над кинжалом. Я знаю, что это инструмент для инъекций зависимостей. Как насчет создания класса-помощника и передачи переменной класса в вашу деятельность как зависимость. Извините, если я вводит в заблуждение. –

2

Я столкнулся с аналогичной ситуацией. Я решаю свою проблему, предоставляя два экземпляра Api в моем ApiModule, каждый с вашим собственным OkHttpClient. Используйте @Named для идентификации каждого из них.

Я старался избегать предоставления двух экземпляров только для конфигурации тайм-аута, для меня это немного странно, но поскольку мой экземпляр API является синглом (для производительности), я не видел другого решения.

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

  • Нет связанных вопросов^_^