1

私はAndroid用のアプリケーションを書いています。アプリケーションはサーバーに接続してコメントを取得します。対象のコードは次のとおりです。

BufferedReader input = null;
HttpClient httpclient = new DefaultHttpClient();
HttpPost httppost = new HttpPost("http://www.domain.com/personal_proj/directorydirectory/file.php");
httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs));
HttpResponse response = httpclient.execute(httppost);
Log.i("TEST","after httpclient.execute()");
HttpEntity entity = response.getEntity();

このコードを HTC Wildfire、HTC Desire Z でテストしたところ、動作しました。このコードを Android 4.0 以降で実行すると、行に到達することはありません

Log.i("TEST","after httpclient.execute()");

、サーバーはリクエストを取得せず、例外をスローしません。

何か案は?

4

2 に答える 2

4

引数なしで構築された DefaultHttpClient のデフォルトの接続とソケットのタイムアウトパラメーターが何であるかはわかりませんが、それを確認するか、パラメーターを設定します。

HttpParams params = new BasicHttpParams(); HttpConnectionParams.setConnectionTimeout(params, 15000); HttpConnectionParams.setSoTimeout(params, 20000);

次に、パラメータを使用して HttpClient を構築します。

new DefaultHttpClient(params)

その時点で、他の応答がない場合は、少なくともタイムアウトを取得する必要があります。

また、AndroidHttpClientを見て(gzip サポートなどの中で合理的なタイムアウトを設定します)、HttpUrlConnection を優先するようにアドバイスを検討してください(ただし、注意事項があります)。

于 2012-10-30T15:43:25.450 に答える
0

Charlie Collins のおかげで、例外をうまく処理できていないことに気付きました。私がキャプチャした例外はandroid.os.NetworkOnMainThreadExceptionです。これは、メイン スレッドでネットワーク操作を実行できないことを意味します (これは、3.0 以降を対象とするアプリケーションでスローされます)。AsyncTask を使用するとうまくいきました。

于 2012-10-31T14:14:31.550 に答える