Cómo configurar el tiempo de espera de HttpResponse para Android en Java

Resuelto Niko Gamulin asked hace 54 años • 10 respuestas

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!

Niko Gamulin avatar Jan 01 '70 08:01 Niko Gamulin
Aceptado

En mi ejemplo, se establecen dos tiempos de espera. El tiempo de espera de la conexión arroja java.net.SocketTimeoutException: Socket is not connectedy 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);
kuester2000 avatar Oct 14 '2009 09:10 kuester2000

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

 avatar Aug 29 '2012 15:08

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);
Pablo Santa Cruz avatar Mar 29 '2009 02:03 Pablo Santa Cruz

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/

Learn OpenGL ES avatar Jan 15 '2015 02:01 Learn OpenGL ES