httpclient.execute(HTTPPOST)发行Android 4.0及更高版本



我正在编写android的应用程序。该应用程序连接到服务器以检索注释。感兴趣的守则是:

BufferedReader input = null;
HttpClient httpclient = new DefaultHttpClient();
HttpPost httppost = new HttpPost("http://www.domain.com/personal_proj/directorydirectory/file.php");
httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs));
HttpResponse response = httpclient.execute(httppost);
Log.i("TEST","after httpclient.execute()");
HttpEntity entity = response.getEntity();

我在HTC Wildfire,HTC Desire Z中测试了此代码,并且它起作用。如果此代码是在Android 4.0 中执行的,则永远不会达到线

Log.i("TEST","after httpclient.execute()");

,服务器永远不会得到请求,也永远不会引发异常。

有什么想法?

我不确定no arg构造的defaulthtpclient的默认连接和套接字超时参数是什么,但是我会检查或设置参数:

HttpParams params = new BasicHttpParams(); HttpConnectionParams.setConnectionTimeout(params, 15000); HttpConnectionParams.setSoTimeout(params, 20000);

然后用参数构建您的httpclient:

new DefaultHttpClient(params)

那时,如果没有其他响应,您至少应该获得超时。

还可以查看AndroidhttpClient(它设置了合理的超时,除其他外观),并考虑建议使用建议更喜欢HttpurlConnection(尽管有一个警告)。

多亏了查理·柯林斯(Charlie Collins),我注意到我的例外情况并没有很好。我捕获的例外是android.os.networkonmainthreadexception。这意味着我无法在主线程上执行网络操作(这是针对针对3.0 的应用程序的)。使用Asynctask为我工作。

最新更新