2012-02-06 14 views
13

Mi trovo di fronte a un problema strano poiché eseguo il test delle mie applicazioni su ICS.Android 4.0 org.apache.http.conn.ConnectTimeoutException: Connetti a ... timeout

utilizzando il seguente codice su Android 2.X funziona bene (a volte capita timeout ma pochissime volte):

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; 

In ICS, non appena ricevo un time out eccezione, tutti i prossimi inviti torneranno un'eccezione di timeout.

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) 

Qualcuno ha affrontato il problema? C'è un modo per evitare questo problema? Ho controllato e non ho trovato una domanda simile (per ICS in particolare).

Grazie per le vostre risposte!

+3

è possibile ottenere qualsiasi soluzione per questo – CoronaPintu

+0

Hai eseguito questo codice in un thread univoco? –

+0

Ho un codice simile su un thread in background e noto lo stesso problema ogni volta che si cambia il target in 4.X. ConnectTimeoutExceptions viene lanciato casualmente, ma spesso. Questo non è stato un problema quando ho scelto il target 2.X – Chicowitz

risposta

-3

Lo stack http Apache è obsoleto e danneggiato in ICS. Chromium è ora lo standard. Assicurarsi che v8 sia il motore di script java predefinito del dispositivo.

+0

Non penso che questo sia collegato. Controlla come sopra per avere una possibile risposta che presto testeremo. Comunque, grazie per la tua risposta. – Seynorth

-1

All'interno di un'applicazione Android è necessario evitare di eseguire operazioni a esecuzione prolungata sul thread dell'interfaccia utente. Questo include file e accesso alla rete.

StrictMode consente di impostare criteri nell'applicazione per evitare di eseguire operazioni errate. A partire da Android 3.0 (Honeycomb) StrictMode è configurato per arrestarsi in modo anomalo con un'eccezione NetworkOnMainThreadException, se si accede alla rete nell'interfaccia utente thread.

Mentre si dovrebbe fare l'accesso alla rete in un thread in background.

Se si utilizza Android 3.0 o versione successiva, è possibile disattivare questo controllo tramite il seguente codice all'inizio del metodo onCreate() della propria attività.

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

Non è consigliabile disattivarlo.

+0

chi ha mai votato, puoi per favore menzionare la ragione qui. – akshay