httppost超时错误

时间:2012-10-02 10:55:52

标签: android http-post

我有一个Android应用程序,使用HttpClient和httppost将数据发布到php服务器。问题是当我从实际的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");
}  

2 个答案:

答案 0 :(得分:0)

试试这段代码: 像这样创建变量:

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

并将此代码与http post:

一起使用
ConnManagerParams.setTimeout(params, CONN_MGR_TIMEOUT);
HttpConnectionParams.setConnectionTimeout(params, CONN_TIMEOUT);
HttpConnectionParams.setSoTimeout(params, SO_TIMEOUT);

答案 1 :(得分:0)

我估计你必须在一个单独的线程上运行服务器通信。您可以使用AsyncTask类或更改严格模式策略。

严格模式政策可以更改如下:

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

虽然不建议使用上述方法,但您可以试一试,看看它是否正常工作。将它们添加到条目活动类。

另外,请确保在清单文件中添加了权限设置。

<uses-permission android:name="android.permission.INTERNET"/>