2012-02-06 12 views
13

Me enfrenta un problema extraño ya que pruebo mis aplicaciones en ICS.Android 4.0 org.apache.http.conn.ConnectTimeoutException: Conéctese a ... agotó el tiempo de espera

usando el siguiente código en Android 2.X funciona bien (a veces ocurren los tiempos de espera, pero muy pocas veces):

HttpParams httpParameters = new BasicHttpParams(); 
    HttpConnectionParams.setConnectionTimeout(httpParameters, CONNECTION_TIMEOUT); 
    HttpConnectionParams.setSoTimeout(httpParameters, SOCKET_TIMEOUT); 

    final DefaultHttpClient httpClient = new DefaultHttpClient(httpParameters); 

    // Create a new HttpClient and Post Header 
    HttpPost httpPost = new HttpPost(url); 

    HttpResponse response = null; 
    try { 
     if (keys != null) { 
      httpPost.setEntity(new UrlEncodedFormEntity(nameValuePairs, HTTP.UTF_8)); 
     } 

     // Cookies 
     // Create a local instance of cookie store 
     if (checkCookieValues()) { 
      BasicClientCookie cookieSession = new BasicClientCookie(mCookieName, mCookieValue); 
      cookieSession.setDomain(mCookieDomain); 
      httpClient.getCookieStore().clear(); 
      httpClient.getCookieStore().addCookie(cookieSession); 
     } 

     // Execute HTTP Post Request 
     response = httpClient.execute(httpPost); 

     httpClient.getConnectionManager().shutdown(); 

    } catch (UnknownHostException e) { 
     Log.e(TAG, "Error when calling postData", e); 
    } catch (SocketTimeoutException e) { 
     Log.e(TAG, "Error when calling postData", e); 
    } catch (ClientProtocolException e) { 
     Log.e(TAG, "Error when calling postData", e); 
    } catch (SocketException e) { 
     Log.e(TAG, "Error when calling postData", e); 
    } catch (IOException e) { 
     Log.e(TAG, "Error when calling postData", e); 
    } 

    return response; 

En ICS, tan pronto como reciba un tiempo de espera excepción, todos los siguientes llamadas volverán una excepción de tiempo de espera.

Timeout exception received : 
    02-06 19:06:05.425: E/PLTV:PlanningTVService(2980): org.apache.http.conn.ConnectTimeoutException: Connect to /78.109.91.193:80 timed out 
    02-06 19:06:05.425: E/PLTV:PlanningTVService(2980):  at org.apache.http.conn.scheme.PlainSocketFactory.connectSocket(PlainSocketFactory.java:121) 
    02-06 19:06:05.425: E/PLTV:PlanningTVService(2980):  at org.apache.http.impl.conn.DefaultClientConnectionOperator.openConnection(DefaultClientConnectionOperator.java:144) 
    02-06 19:06:05.425: E/PLTV:PlanningTVService(2980):  at org.apache.http.impl.conn.AbstractPoolEntry.open(AbstractPoolEntry.java:164) 
    02-06 19:06:05.425: E/PLTV:PlanningTVService(2980):  at org.apache.http.impl.conn.AbstractPooledConnAdapter.open(AbstractPooledConnAdapter.java:119) 
    02-06 19:06:05.425: E/PLTV:PlanningTVService(2980):  at org.apache.http.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java:360) 
    02-06 19:06:05.425: E/PLTV:PlanningTVService(2980):  at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:555) 
    02-06 19:06:05.425: E/PLTV:PlanningTVService(2980):  at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:487) 
    02-06 19:06:05.425: E/PLTV:PlanningTVService(2980):  at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:465) 
    02-06 19:06:05.425: E/PLTV:PlanningTVService(2980):  at com.kreactive.planningtv.service.PlanningTVService.postData(PlanningTVService.java:1554) 
    02-06 19:06:05.425: E/PLTV:PlanningTVService(2980):  at com.kreactive.planningtv.service.PlanningTVService.fbConnect(PlanningTVService.java:1897) 
    02-06 19:06:05.425: E/PLTV:PlanningTVService(2980):  at com.kreactive.planningtv.service.PlanningTVService.onHandleIntent(PlanningTVService.java:569) 
    02-06 19:06:05.425: E/PLTV:PlanningTVService(2980):  at android.app.IntentService$ServiceHandler.handleMessage(IntentService.java:65) 
    02-06 19:06:05.425: E/PLTV:PlanningTVService(2980):  at android.os.Handler.dispatchMessage(Handler.java:99) 
    02-06 19:06:05.425: E/PLTV:PlanningTVService(2980):  at android.os.Looper.loop(Looper.java:137) 
    02-06 19:06:05.425: E/PLTV:PlanningTVService(2980):  at android.os.HandlerThread.run(HandlerThread.java:60) 

¿Alguien ha enfrentado el problema? ¿Hay alguna manera de evitar este problema? Lo revisé y no encontré una pregunta similar (especialmente para ICS).

¡Gracias por sus respuestas!

+3

puede obtener alguna solución para este – CoronaPintu

+0

¿Ejecutó este código en un hilo único? –

+0

Tengo un código similar en un hilo de fondo y veo el mismo problema cada vez que cambio mi objetivo a 4.X. ConnectTimeoutExceptions se lanzan al azar, pero a menudo. Esto no fue un problema cuando apunté 2.X – Chicowitz

Respuesta

-3

La pila http de Apache está en desuso y está descompuesta en ICS. Chromium es ahora el estándar. Asegúrese de que v8 sea el motor de script java predeterminado de su dispositivo.

+0

No creo que esto esté relacionado. Verifique lo anterior para tener una respuesta posible que vamos a probar pronto. De todos modos, gracias por tu respuesta. – Seynorth

-1

En una aplicación de Android, debe evitar realizar operaciones de larga ejecución en el subproceso de la interfaz de usuario. Esto incluye acceso a archivos y redes.

StrictMode permite configurar políticas en su aplicación para evitar hacer cosas incorrectas. A partir de Android 3.0 (Honeycomb), StrictMode está configurado para bloquearse con una excepción NetworkOnMainThreadException, si se accede a la red en la interfaz de usuario con el hilo.

Mientras que debe hacer acceso a la red en una cadena de fondo.

Si su objetivo es Android 3.0 o superior, puede desactivar esta verificación mediante el siguiente código al comienzo de su método onCreate() de su actividad.

StrictMode.ThreadPolicy policy = new StrictMode. 
ThreadPolicy.Builder().permitAll().build(); 
StrictMode.setThreadPolicy(policy); 

No se recomienda apagar esto.

+0

quien haya desestimado el voto, puede mencionar la razón aquí. – akshay

Cuestiones relacionadas