Тайм-аут соединения Http на Android, не работающем

Я пишу приложение, которое соединяется с веб-сервисом, и я не хочу, чтобы это ожидало слишком долго, если это не может получить соединение. Я поэтому установил connectionTimeout httpparams. Но это, кажется, не имеет эффекта вообще.

Для тестирования я поворачиваюсь своего WLAN временно. Приложение пытается соединиться в течение достаточно долгого времени (путь больше, чем эти 3 секунды, которые я хочу), и затем бросает UnknownHostException.

Вот мой код:

try{
    HttpClient httpclient = new DefaultHttpClient();
    HttpParams params = httpclient.getParams();
    HttpConnectionParams.setConnectionTimeout(params, 3000);
    HttpConnectionParams.setSoTimeout(params, 3000);

    httppost = new HttpPost(URL);
    StringEntity se = new StringEntity(envelope,HTTP.UTF_8);
    httppost.setEntity(se);
    //Code stops here until UnknownHostException is thrown.
    BasicHttpResponse httpResponse = (BasicHttpResponse) httpclient.execute(httppost);

    HttpEntity entity = httpResponse.getEntity();
    return entity;

}catch (Exception e){
    e.printStackTrace();
}

У кого-либо есть какие-либо идеи, что я пропустил?

42
задан Cristian 8 December 2010 в 14:04
поделиться

1 ответ

Попробуйте сделать это так:

HttpPost httpPost = new HttpPost(url);
StringEntity se = new StringEntity(envelope,HTTP.UTF_8);
httpPost.setEntity(se);

HttpParams httpParameters = new BasicHttpParams();
// Set the timeout in milliseconds until a connection is established.
int timeoutConnection = 3000;
HttpConnectionParams.setConnectionTimeout(httpParameters, timeoutConnection);
// Set the default socket timeout (SO_TIMEOUT) 
// in milliseconds which is the timeout for waiting for data.
int timeoutSocket = 3000;
HttpConnectionParams.setSoTimeout(httpParameters, timeoutSocket);

DefaultHttpClient httpClient = new DefaultHttpClient(httpParameters);
BasicHttpResponse httpResponse = (BasicHttpResponse)  httpClient.execute(httpPost);

HttpEntity entity = httpResponse.getEntity();
return entity;

Тогда вы сможете поймать возможный ConnectTimeoutException.

74
ответ дан 26 November 2019 в 23:39
поделиться
Другие вопросы по тегам:

Похожие вопросы: