我有一个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");
}
答案 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"/>