我正在为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的建议(尽管对此有一些警告)。