Android 4.0 org.apache.http.conn.ConnectTimeoutException: Connectez-vous à … expiré

Je suis confronté à un problème étrange puisque je teste mes applications sur ICS.

En utilisant le code suivant sur Android 2.X fonctionne bien (parfois les délais d'attente se produisent, mais très peu de fois):

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; 

Sur ICS, dès que je reçois une exception de délai, tous les appels suivants renverront une exception de temporisation.

  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) 

Est-ce que quelqu'un a fait face au problème? Existe-t-il un moyen d'éviter ce problème? J'ai vérifié et je n'ai pas trouvé une question similaire (pour ICS en particulier).

Merci pour vos réponses!

2 Solutions collect form web for “Android 4.0 org.apache.http.conn.ConnectTimeoutException: Connectez-vous à … expiré”

Dans une application Android, vous devez éviter d'effectuer de longues opérations sur le thread de l'interface utilisateur. Cela inclut l'accès au fichier et au réseau.

StrictMode permet de configurer des stratégies dans votre application pour éviter de faire des choses incorrectes. À partir d' Android 3.0 (Honeycomb) StrictMode est configuré pour se bloquer avec une exception NetworkOnMainThreadException, si le réseau est accessible dans le thread de l'interface utilisateur .

Bien que vous deviez effectuer un accès réseau dans un thread en arrière-plan.

Si vous ciblez Android 3.0 ou plus, vous pouvez désactiver cette option via le code suivant au début de votre méthode onCreate () de votre activité.

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

Il n'est pas conseillé de l'éteindre.

La pile http d'Apache est obsolète et cassée dans ICS. Chromium est maintenant la norme. Assurez-vous que v8 est votre moteur de script java par défaut.

coAndroid est un fan Android de Google, tout sur les téléphones Android, Android Wear, Android Dev et Android Games Apps.