2012-02-06 9 views
13

Tôi đang gặp phải sự cố lạ vì tôi kiểm tra các ứng dụng của mình trên ICS.Android 4.0 org.apache.http.conn.ConnectTimeoutException: Kết nối với ... hết thời gian

Sử dụng đoạn mã sau trên Android 2.x hoạt động tốt (đôi khi timeout xảy ra nhưng rất ít lần):

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; 

On ICS, ngay sau khi tôi nhận được một thời gian ra ngoại lệ, tất cả các cuộc gọi tiếp theo sẽ trở lại một ngoại lệ thời gian chờ.

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) 

Có ai gặp sự cố không? Có cách nào để tránh vấn đề này không? Tôi đã kiểm tra và không tìm thấy câu hỏi tương tự (đặc biệt là ICS).

Cảm ơn câu trả lời của bạn!

+3

bạn có thể nhận được bất kỳ giải pháp nào cho số này – CoronaPintu

+0

Bạn có chạy mã này trong một chuỗi duy nhất không? –

+0

Tôi có mã tương tự trên một chuỗi nền và thông báo cùng một vấn đề bất cứ khi nào thay đổi mục tiêu của tôi thành 4.X. ConnectTimeoutExceptions được ném ngẫu nhiên, nhưng thường xuyên. Đây không phải là vấn đề khi nhắm mục tiêu 2.X – Chicowitz

Trả lời

-3

Ngăn xếp Apache http không được dùng nữa và bị hỏng trong ICS. Chromium hiện là tiêu chuẩn. Đảm bảo rằng v8 là thiết bị java script mặc định của thiết bị của bạn.

+0

Tôi không nghĩ rằng điều này có liên quan. Kiểm tra như trên để có một câu trả lời có thể, chúng tôi sẽ kiểm tra sớm. Dù sao, cảm ơn bạn đã trả lời của bạn. – Seynorth

-1

Trong ứng dụng Android, bạn nên tránh thực hiện các hoạt động chạy dài trên chuỗi giao diện người dùng. Điều này bao gồm truy cập tệp và mạng.

StrictMode cho phép thiết lập chính sách trong ứng dụng của bạn để tránh làm những việc không chính xác. Kể từ Android 3.0 (Honeycomb) StrictMode được cấu hình để sụp đổ với ngoại lệ NetworkOnMainThreadException, nếu mạng được truy cập trong chủ đề giao diện người dùng.

Trong khi bạn nên thực hiện truy cập mạng trong chuỗi nền.

Nếu bạn đang nhắm mục tiêu Android 3.0 trở lên, bạn có thể tắt kiểm tra này thông qua mã sau vào đầu phương thức onCreate() của hoạt động của bạn.

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

Không nên tắt chức năng này.

+0

ai đã từ bỏ phiếu bầu, bạn có thể đề cập đến lý do tại đây không. – akshay