我正在为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()");
,服务器永远不会收到请求,它永远不会抛出异常。
有什么想法吗?
答案 0 :(得分:4)
我不确定no arg构造的DefaultHttpClient的默认连接和套接字超时参数是什么,但我会检查,或设置参数:
HttpParams params = new BasicHttpParams();
HttpConnectionParams.setConnectionTimeout(params, 15000);
HttpConnectionParams.setSoTimeout(params, 20000);
然后用params构建你的HttpClient:
new DefaultHttpClient(params)
此时,如果没有其他响应,您至少应该获得超时。
另请参阅AndroidHttpClient(它设置合理的超时,以及gzip支持等),并考虑对prefer HttpUrlConnection的建议(尽管有一些警告)。
答案 1 :(得分:0)
感谢Charlie Collins,我注意到我没有处理好异常。我捕获它的例外是android.os.NetworkOnMainThreadException。这意味着我无法在主线程上执行网络操作(这适用于针对3.0+的应用程序)。使用AsyncTask为我工作。