HttpClient SocketTimeoutException обработка - PullRequest
0 голосов
/ 25 апреля 2018

Я получаю данные от REST API server, используя HttpClient.
Теперь я должен справиться, когда я не могу получить ответ в течение 10 секунд от API Server.
Итак, я сделал это следующим образом

HttpClient httpClient = new DefaultHttpClient();

HttpParams httpParams = httpClient.getParams();
HttpConnectionParams.setConnectionTimeout(httpParams, 10000);
HttpConnectionParams.setSoTimeout(httpParams, 10000);

HttpPost httpPost = new HttpPost("api server address");
httpPost.setParams(...);

HttpResponse response;
try{
    response = httpClient.execute(httpPost);    
} catch(SocketTimeoutException e){
    httpPost.setParams(...); // change param
    response = httpClient.execute(httpPost);
}

Это произошло как
invalid use of singleclientconnmanager: connection still allocated.
Это имеет смысл, но я не знаю, как справиться.

1 Ответ

0 голосов
/ 25 апреля 2018

проблема

invalid use of singleclientconnmanager: connection still allocated.

происходит, поскольку вы вызываете метод execute () дважды, когда блок управления переходит в блок исключений, т. Е. Возникает какое-либо исключение.

try{
    // First Call
    response = httpClient.execute(httpPost);    
} catch(SocketTimeoutException e){
    httpPost.setParams(...); // change param
    //Second Call
    response = httpClient.execute(httpPost);
}

Элегантный способ справиться с этим - использовать HTTPRequestRetryHandler. http://hc.apache.org/httpcomponents-client-ga/tutorial/html/fundamentals.html#d4e280

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...