2011-07-15 15 views
5

私は本当に解決できないような私のアプリケーションでこの非常に大きなバグを持っています。私は、次のコードを経由して、残りの呼び出し作るたび:HttpClient executeはConnectTimeoutExceptionを与え続けます

07-15 11:22:47.448: WARN/System.err(973): org.apache.http.conn.ConnectTimeoutException: Connect to (some ip-address) timed out 

をしかし、時にはコードは完璧に動作し、それが必要として、私は私のデータを受け取る:

HttpGet request = new HttpGet(url + getParams()); 

    HttpParams httpParameters = new BasicHttpParams(); 
    HttpConnectionParams.setConnectionTimeout(httpParameters, 5000); 
    HttpConnectionParams.setSoTimeout(httpParameters, 10000); 

    DefaultHttpClient httpClient = new DefaultHttpClient(httpParameters); 

    httpClient.execute(request); 

を私はDDMSでエラーが発生します。私はまた、私のコンピュータ上の通常のウェブブラウザーを介して残りのサーバー呼び出しをテストし、それは常に100ms以内に私のデータを返す。だから私は何が間違っているの?私も別のデバイスでそれをテストしましたが、それは私に同じ問題をもたらします。私は誰かが私の問題を解決できるかどうか嬉しいです:)

+0

のThおそらく遅いネットワーク(あなたはWi-Fiや3Gを使用していますか?)と関係があります。エミュレータで実行してみてください。接続タイムアウトを増やし、再試行の仕組みを設定する必要があるかもしれません。 – kgiannakakis

+0

ええ、私の他のアプリでは、私はいつも要求されたデータを得ることができます。そして、私はWiFiを使用している携帯電話の1つで、それは私に例外を与えます。そして、私が知る限り、httpclientには自動再試行メカニズムがありますか? – Martijn538

+0

タイムアウトを20〜30秒に増やします。時には、回線がビジーでタイムアウトになる可能性があります。 –

答えて

0

あなたの開発マシンを使用して接続できるかどうかチェックし、また読み込み時間を確認してください。タイムアウトが小さすぎる可能性は非常に高いです。

+0

私は20秒にタイムアウトを変更しましたが、それと同じ問題です。もっと何を試すことができますか?誰もこの問題に遭遇したことはありませんか? – Martijn538

+0

あなたのdevマシンのURLビューにアクセスできますか? –

+0

ええ、問題は:時々それは良いと時間がロードされ、時には全くロードされていないようです! – Martijn538

1

私は同じ問題を抱えています。

リクエストに直接IPを使用してみてください。私は、Android DNSのルックアップが時には非常に奇妙な動作をしていることに気付きました。私はこれを探して見つけた:http://mailinglists.945824.n3.nabble.com/Android-and-reverse-DNS-lookup-issues-td3011461.html

Dunno関連性が高いかどうか、私はまだ回避策を見つけようとしています。多分ここの誰かが見て、それを把握することができます。

+0

hostsファイルを変更した後もまったく同じ問題がありました。電話機を再起動すると問題が解決しました。 – Niels

5

問題はDefaultHttpClientです。非同期で使用していますか? DefaultHttpClientはスレッドセーフではないため、非同期環境で使用すると問題が発生する可能性があります。私の活動が同時に複数のHTTP接続を開始したときに私はこの問題を抱えていました。そして、私はそれを変更してHttpURLConnectionを使用するようになりました。あなたはこのサイトを参照することができます

0

http://www.vogella.de/articles/AndroidNetworking/article.htmlは、同様の問題があったが、同時に複数のデバイスを使用して接続しようとしたときにのみ再生され、ソリューションでしたことができます:

インスタンスの再起動が接続して問題を解決しました。 (または単には、ネットワークサービスを再起動する必要があります)

(C)私のサーバー/インスタンスの管理

また、同様の問題が発生する人がいるといくつかの他の解決策は、例えば、彼らのために働いていた:

  1. は、Android manifでモードを保存VM有効
  2. 無効にtcp_tw_recycle & tcp_tw_reuse無効にtcp_timestamp EST:アンドロイド:vmSafeMode = "true" を

関連する問題