2010-12-17 35 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,也许如果你纠正它,以防万一它会是错误的,那么请求不会抛出你的错误。