2010-12-17 3 views
5

В моем приложении я написал код для подключения к URL-адресу, как показано ниже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

Каков адрес? Вы уверены, что ваш сервер включен? –

+0

- это сервер, доступный и принимающий соединения? – mad

+0

Да, мой сервер работает, и эта ошибка возникает несколько раз – ADIT

ответ

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-адрес, и приложение ищет данные, но не находит его. Проверьте свой URL-адрес, возможно, если вы его исправите, на всякий случай, если бы это было неправильно, тогда запрос не бросил бы вам эту ошибку.

Смежные вопросы