Cómo configurar el tiempo de espera de HttpResponse para Android en Java
He creado la siguiente función para verificar el estado de la conexión:
private void checkConnectionStatus() {
HttpClient httpClient = new DefaultHttpClient();
try {
String url = "http://xxx.xxx.xxx.xxx:8000/GaitLink/"
+ strSessionString + "/ConnectionStatus";
Log.d("phobos", "performing get " + url);
HttpGet method = new HttpGet(new URI(url));
HttpResponse response = httpClient.execute(method);
if (response != null) {
String result = getResponse(response.getEntity());
...
Cuando apago el servidor para probar, la ejecución espera mucho tiempo en la línea
HttpResponse response = httpClient.execute(method);
¿Alguien sabe cómo configurar el tiempo de espera para evitar esperar demasiado?
¡Gracias!
En mi ejemplo, se establecen dos tiempos de espera. El tiempo de espera de la conexión arroja java.net.SocketTimeoutException: Socket is not connected
y el tiempo de espera del socket java.net.SocketTimeoutException: The operation timed out
.
HttpGet httpGet = new HttpGet(url);
HttpParams httpParameters = new BasicHttpParams();
// Set the timeout in milliseconds until a connection is established.
// The default value is zero, that means the timeout is not used.
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 = 5000;
HttpConnectionParams.setSoTimeout(httpParameters, timeoutSocket);
DefaultHttpClient httpClient = new DefaultHttpClient(httpParameters);
HttpResponse response = httpClient.execute(httpGet);
Si desea configurar los parámetros de cualquier HTTPClient existente (por ejemplo, DefaultHttpClient o AndroidHttpClient), puede utilizar la función setParams() .
httpClient.setParams(httpParameters);
Para establecer la configuración en el cliente:
AndroidHttpClient client = AndroidHttpClient.newInstance("Awesome User Agent V/1.0");
HttpConnectionParams.setConnectionTimeout(client.getParams(), 3000);
HttpConnectionParams.setSoTimeout(client.getParams(), 5000);
He usado esto con éxito en JellyBean, pero también debería funcionar para plataformas más antiguas...
HT
Si está utilizando la biblioteca cliente http de Yakarta , puede hacer algo como:
HttpClient client = new HttpClient();
client.getParams().setParameter(HttpClientParams.CONNECTION_MANAGER_TIMEOUT, new Long(5000));
client.getParams().setParameter(HttpClientParams.SO_TIMEOUT, new Integer(5000));
GetMethod method = new GetMethod("http://www.yoururl.com");
method.getParams().setParameter(HttpMethodParams.SO_TIMEOUT, new Integer(5000));
method.getParams().setParameter(HttpMethodParams.RETRY_HANDLER,
int statuscode = client.executeMethod(method);
Si está utilizando el cliente http predeterminado, aquí se explica cómo hacerlo utilizando los parámetros http predeterminados:
HttpClient client = new DefaultHttpClient();
HttpParams params = client.getParams();
HttpConnectionParams.setConnectionTimeout(params, 3000);
HttpConnectionParams.setSoTimeout(params, 3000);
El crédito original va a http://www.jayway.com/2009/03/17/configuring-timeout-with-apache-httpclient-40/