我正在为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()");


,服务器永远不会获得请求,也永远不会抛出异常。

有任何想法吗?

最佳答案

我不确定用于无参数构造的DefaultHttpClient的默认连接和套接字超时参数是什么,但是我会进行检查或设置以下参数:

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

然后使用参数构造您的HttpClient:

new DefaultHttpClient(params)

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

还要查看AndroidHttpClient(它设置了合理的超时时间,以及诸如gzip支持之类的其他东西),并考虑了有关prefer HttpUrlConnection的建议(尽管对此有一些警告)。

07-28 12:27