2010-12-17 5 views
5

私はerror.Iamがjava.net.socketexception:アンドロイドの操作のタイムアウトの問題?私のアプリケーションで

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) 

私のlogcatを送信してしまった

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

以下のように私はこれが起こっているこの問題を解決する方法

+0

URLは何ですか?あなたのサーバーはアップしていますか? –

+0

は到達可能なサーバーで、接続を受け入れますか? – mad

+0

はい私のサーバーは稼動していますが、このエラーは何度か発生します – ADIT

答えて

13

をURLに接続するためのコードを書きましたサーバーが応答するのに時間がかかりすぎることがあります。実際には、これはネットワークの速度が遅いために起こる可能性もあります。そのため、完全に制御できません。あなたが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をチェックしてください。もしそれが間違っている場合に備えて、それを修正すれば、そのリクエストはあなたにそのエラーを投げかけません。

関連する問題