【发布时间】:2010-06-15 15:04:40
【问题描述】:
更新: 自己找到了答案,见下文:-)
你好,
我目前正在编写一个使用 HTTP Post 和 AsyncTask 在后台提交内容的 Android 应用程序。我为此使用org.apache.http.client 包。我的代码基于this example。
基本上,我的代码如下所示:
public void postData() {
// Create a new HttpClient and Post Header
HttpClient httpclient = new DefaultHttpClient();
HttpPost httppost = new HttpPost("http://192.168.1.137:8880/form");
try {
List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(2);
nameValuePairs.add(new BasicNameValuePair("id", "12345"));
nameValuePairs.add(new BasicNameValuePair("stringdata", "AndDev is Cool!"));
httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs));
// Execute HTTP Post Request
HttpResponse response = httpclient.execute(httppost);
} catch (ClientProtocolException e) {
Log.e(TAG,e.toString());
} catch (IOException e) {
Log.e(TAG,e.toString());
}
}
问题是 httpclient.execute(..) 行大约需要 1.5 到 3 秒,我不明白为什么。仅使用 HTTP Get 请求页面大约需要 80 毫秒左右,因此问题似乎不在于网络延迟本身。
问题似乎也不在服务器端,我也尝试过将数据发布到http://www.disney.com/,结果同样缓慢。 Firebug 在本地将数据发布到我的服务器时显示 1 毫秒的响应时间。
这发生在模拟器和我的 Nexus One(都使用 Android 2.2)上。
如果你想看完整的代码,我已经把它放在GitHub。
这只是一个在后台使用 AsyncTask 进行 HTTP Post 的虚拟程序,只需按一下按钮。这是我的第一个 Android 应用程序,也是我很长一段时间以来的第一个 java 代码。顺便说一句,也是我关于 Stackoverflow 的第一个问题 ;-)
知道为什么 httpclient.execute(httppost) 需要这么长时间吗?
【问题讨论】:
-
我遇到了同样的问题,只是更糟。完成
HttpPost甚至可能需要 20 秒以上的时间。我尝试了您的修复方法,但似乎没有帮助。
标签: android http httpclient