1

HttpClienthttppostを使用してphpサーバーにデータを投稿するAndroidアプリケーションがあります。問題は、実際の Android デバイスからアプリケーションを実行すると、常にエラーが発生することです。

「データ送信エラー: org.apache.http.conn.connectTimeoutException:接続先 / タイムアウト。

ただし、デバイス ブラウザを使用すると、サーバーの URL にアクセスできます。エミュレータでは問題なく動作しています。

これは私のコードです

try
{
   HttpClient httpclient = new DefaultHttpClient();
   HttpPost httppost = new HttpPost(url);
   httppost.setEntity(new UrlEncodedFormEntity(data));
   HttpResponse response = httpclient.execute(httppost);

   Log.i("postData", response.getStatusLine().toString());
   WriteFile("Response:  "+response.getStatusLine().toString(), ":", ":",
           ":","erlog.txt");
}
catch(Exception e)
{
   Log.e("log_tag", "Error:  "+e.toString());
   WriteFile("send data Error:  "+e.toString(), ":", ":", ":","erlog.txt");
}  
4

2 に答える 2

0

このコードを試してください: 次のような変数を作成します:

private static final long CONN_MGR_TIMEOUT = 10000;
private static final int CONN_TIMEOUT = 50000;
private static final int SO_TIMEOUT = 50000;

このコードを http 投稿で使用します。

ConnManagerParams.setTimeout(params, CONN_MGR_TIMEOUT);
HttpConnectionParams.setConnectionTimeout(params, CONN_TIMEOUT);
HttpConnectionParams.setSoTimeout(params, SO_TIMEOUT);
于 2012-10-02T11:05:28.033 に答える
0

サーバー通信は別のスレッドで実行する必要があると思います。AsyncTask クラスを使用するか、厳密モード ポリシーを変更できます。

Strict モード ポリシーは、次のように変更できます。

ThreadPolicy oldThreadPolicy = StrictMode.getThreadPolicy();
StrictMode.setThreadPolicy(new StrictMode.ThreadPolicy.Builder(oldThreadPolicy).permitNetwork().permitDiskReads().permitDiskWrites().build());

上記の方法はお勧めできませんが、試してみて動作を確認することはできます。それらをエントリ アクティビティ クラスに追加します。

また、マニフェスト ファイルに権限設定を追加したことを確認してください。

<uses-permission android:name="android.permission.INTERNET"/>
于 2012-10-02T11:15:21.350 に答える