1

我有一个 android 应用程序,它使用HttpClienthttppost 将数据发布到 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");
}  
4

2 回答 2

0

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

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

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 回答
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);
于 2012-10-02T11:05:28.033 回答