2010-12-17 66 views
5

在我的應用程序編寫代碼,用於連接到網址,如下所示java.net.socketexception:Android中的操作超時問題?

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

我得到了error.Iam送我的logcat

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) 

如何解決這個問題

+0

什麼是網址?你確定你的服務器已經啓動了嗎? – 2010-12-17 12:36:02

+0

是可以訪問的服務器,它接受連接嗎? – mad 2010-12-17 12:36:30

+0

是的,我的服務器已啓動,並且此錯誤僅在某些時間發生 – ADIT 2010-12-17 12:57:26

回答

13

這是發生因爲有時您的服務器需要很長時間才能響應。其實這也可能是由於網絡速度較慢而發生的,所以您無法完全控制它。如果您使用HttpClient,你可以增加超時時間:

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是等待建立連接的時間。 WAIT_RESPONSE_TIMEOUT是等待收到數據的時間 - 在你的情況下,這是你需要增加的。

底線:

  • 使用URL,現在就開始使用的HttpClient停止。
  • 您所描述的情況是生產應用中非常常見的情況,您需要對其進行處理。增加超時並不總是有幫助,因爲當網絡緩慢時,您的應用程序似乎會停止。您可以添加一個重試機制或通知用戶請求失敗,並請他再試一次。
0

此外,我遇到了你通過一個錯誤的網址,應用程序正在尋找檢索數據,但從來沒有找到它。檢查你的url,也許如果你糾正它,以防萬一它會是錯誤的,那麼請求不會拋出你的錯誤。