2010-12-17 24 views
5

Trong ứng dụng của tôi, tôi đã viết code để kết nối với URL như dưới đâyjava.net.socketexception: Vấn đề về thời gian hoạt động trong Android?

InputStream inputStream = new URL(url).openStream();  

tôi đã nhận error.Iam gửi logcat tôi

12-17 15:06:55.065: WARN/System.err(4952): java.net.SocketException: The operation timed out 
12-17 15:06:55.065: WARN/System.err(4952):  at org.apache.harmony.luni.platform.OSNetworkSystem.connectStreamWithTimeoutSocketImpl(Native Method) 
12-17 15:06:55.065: WARN/System.err(4952):  at org.apache.harmony.luni.platform.OSNetworkSystem.connect(OSNetworkSystem.java:115) 
12-17 15:06:55.065: WARN/System.err(4952):  at org.apache.harmony.luni.net.PlainSocketImpl.connect(PlainSocketImpl.java:244) 
12-17 15:06:55.075: WARN/System.err(4952):  at org.apache.harmony.luni.net.PlainSocketImpl.connect(PlainSocketImpl.java:533) 
12-17 15:06:55.075: WARN/System.err(4952):  at java.net.Socket.connect(Socket.java:1055) 
12-17 15:06:55.075: WARN/System.err(4952):  at org.apache.harmony.luni.internal.net.www.protocol.http.HttpConnection.<init>(HttpConnection.java:62) 
12-17 15:06:55.075: WARN/System.err(4952):  at org.apache.harmony.luni.internal.net.www.protocol.http.HttpConnectionPool.get(HttpConnectionPool.java:88) 
12-17 15:06:55.075: WARN/System.err(4952):  at org.apache.harmony.luni.internal.net.www.protocol.http.HttpURLConnectionImpl.getHTTPConnection(HttpURLConnectionImpl.java:927) 
12-17 15:06:55.085: WARN/System.err(4952):  at org.apache.harmony.luni.internal.net.www.protocol.http.HttpURLConnectionImpl.connect(HttpURLConnectionImpl.java:909) 
12-17 15:06:55.085: WARN/System.err(4952):  at org.apache.harmony.luni.internal.net.www.protocol.http.HttpURLConnectionImpl.getInputStream(HttpURLConnectionImpl.java:1152) 
12-17 15:06:55.085: WARN/System.err(4952):  at java.net.URL.openStream(URL.java:653) 

Làm thế nào để giải quyết vấn đề này

+0

url là gì? Bạn có chắc là máy chủ của bạn đang hoạt động không? –

+0

là máy chủ có thể truy cập và có chấp nhận kết nối không? – mad

+0

có máy chủ của tôi đang hoạt động và lỗi này chỉ xuất hiện một số lần – ADIT

Trả lời

13

này đang xảy ra vì một số lần máy chủ của bạn mất quá nhiều thời gian để phản hồi. Thực tế điều này cũng có thể xảy ra do mạng chậm, do đó bạn không có toàn quyền kiểm soát nó. Nếu bạn đang sử dụng HttpClient, bạn có thể tăng thời gian timeout:

HttpParams httpParameters = new BasicHttpParams(); 
HttpConnectionParams.setConnectionTimeout(httpParameters, CONNECTION_TIMEOUT); 
HttpConnectionParams.setSoTimeout(httpParameters, WAIT_RESPONSE_TIMEOUT); 
HttpConnectionParams.setTcpNoDelay(httpParameters, true); 

client = new DefaultHttpClient(httpParameters); 

CONNECTION_TIMEOUT là thời gian để chờ đợi cho một kết nối thành lập. WAIT_RESPONSE_TIMEOUT là thời gian chờ dữ liệu được nhận - trong trường hợp của bạn, đây là những gì bạn cần tăng.

Bottom line:

  • Dừng sử dụng URL và bắt đầu sử dụng HttpClient bây giờ.
  • Tình huống bạn mô tả là một trong những tình huống rất phổ biến trong một ứng dụng sản xuất và bạn cần phải phục vụ cho nó. Việc tăng thời gian chờ sẽ không phải lúc nào cũng hữu ích, vì ứng dụng của bạn sẽ ngừng xuất hiện khi có mạng chậm. Bạn có thể thêm một cơ chế thử lại hoặc thông báo cho người dùng rằng yêu cầu đã thất bại và yêu cầu anh ta thử lại.
0

Ngoài ra, tôi có trường hợp bạn đang truyền sai địa chỉ và ứng dụng đang tìm cách truy xuất dữ liệu nhưng không bao giờ tìm thấy. Kiểm tra url của bạn, có thể nếu bạn sửa chữa nó, chỉ trong trường hợp nó sẽ là sai, sau đó yêu cầu sẽ không ném bạn rằng lỗi.

Các vấn đề liên quan