2011-07-15 8 views
5

Tengo este gran error en mi aplicación que parece que no puedo resolver. Cada vez que hago una llamada a través de resto el siguiente código:HttpClient execute sigue dando ConnectTimeoutException

HttpGet request = new HttpGet(url + getParams()); 

    HttpParams httpParameters = new BasicHttpParams(); 
    HttpConnectionParams.setConnectionTimeout(httpParameters, 5000); 
    HttpConnectionParams.setSoTimeout(httpParameters, 10000); 

    DefaultHttpClient httpClient = new DefaultHttpClient(httpParameters); 

    httpClient.execute(request); 

consigo el error en DDMS:

07-15 11:22:47.448: WARN/System.err(973): org.apache.http.conn.ConnectTimeoutException: Connect to (some ip-address) timed out 

Pero a veces el código funciona perfecto y recibo mis datos como debería. También probé la llamada del servidor de reposo a través de un navegador web normal en mi computadora y eso siempre devuelve mis datos dentro de los 100 ms. Entonces, ¿qué estoy haciendo mal? También lo probé en otro dispositivo, pero eso me da el mismo problema. Estaría muy contento si alguien pudiera resolver mi problema :)

+0

Th probablemente tiene que ver con una red lenta (¿estás usando Wi-Fi o 3G?). Intenta ejecutarlo en el emulador. Es posible que necesite aumentar el tiempo de espera de conexión y configurar un mecanismo de reintento. – kgiannakakis

+0

Sí, pero con mis otras aplicaciones puedo obtener los datos solicitados todo el tiempo. Y con uno de los teléfonos estoy usando WiFi, pero ese me da excepciones tampoco. Y hasta donde yo sé, ¿httpclient tiene un mecanismo de reintento automático? – Martijn538

+0

Aumente el tiempo de espera a 20-30 segundos. A veces, la línea puede estar ocupada y, por lo tanto, el tiempo de espera. –

Respuesta

0

Compruebe si puede conectar usando su máquina de desarrollo, también verifique los tiempos de carga. Existe una gran posibilidad de que sus tiempos de espera sean demasiado pequeños.

+0

Cambié los tiempos de espera a 20 segundos, sigue siendo el mismo problema ... ¿Qué más puedo probar? ¿Alguien ha encontrado este problema antes? – Martijn538

+0

¿Puede acceder a la URL para ver su máquina de desarrollo? –

+0

Sí, pero el problema es que a veces se carga bien y a tiempo y, a veces, ¡parece que no se carga en absoluto! – Martijn538

1

Tengo el mismo problema.

Intente utilizar la dirección IP directa para sus solicitudes. Noté que las búsquedas de DNS de Android se comportan bastante raras a veces. Busqué y encontré esto: http://mailinglists.945824.n3.nabble.com/Android-and-reverse-DNS-lookup-issues-td3011461.html.

No sé si es relevante o no, todavía estoy tratando de encontrar una solución. Tal vez alguien aquí puede echar un vistazo y descubrirlo.

+0

Tuve exactamente el mismo problema después de haber cambiado mi archivo de host. Un reinicio del teléfono resolvió el problema. – Niels

5

El problema es el DefaultHttpClient. ¿Lo estás usando de forma asíncrona? Como el DefaultHttpClient no es seguro para subprocesos, su uso en un entorno asíncrono puede causar un problema. Tuve este problema antes cuando mi actividad comenzó con varias conexiones Http al mismo tiempo y terminé cambiándolo para usar HttpURLConnection. Se puede hacer referencia a este sitio: http://www.vogella.de/articles/AndroidNetworking/article.html

0

Tenía un problema similar, podría ser reimpreso al intentar conectarse a través de varios dispositivos a la vez y la solución fue: reinicio

Instancia problema resuelto con conexiones. (o sólo tiene que reiniciar el servicio de red)

(c) Mi servidor/instancia de administración

Además, hay personas que experimentan problemas similares y algunas otras soluciones trabajaron para ellos, por ejemplo:

  1. tcp_timestamp Desactivar
  2. Desactivar tcp_tw_reuse & tcp_tw_recycle
  3. Activado vm modo de ahorrar en manif Android est: android: vmSafeMode = "true"

Cuestiones relacionadas