以前一直在写http请求,设置超时也没怎么认真测试过,今天项目不怎么忙,写了一个http请求测了一下发现以前设置的超时根本没起作用,原来是在发送请求之后设置的超时时间,说着比较迷糊,还是直接上代码。
http请求代码:
/** * http Post请求的过程 * @param postParameters:请求服务端接口需要的数据 * @param url:请求接口的地址 * @return result */ private static String requestPost(List<NameValuePair> postParameters,String url) { String result = null; BufferedReader in = null; try { HttpClient client = new DefaultHttpClient(); //Represents a collection of HTTP protocol and framework parameters HttpParams params = null; params = client.getParams(); //set timeout HttpConnectionParams.setConnectionTimeout(params, 5000); HttpConnectionParams.setSoTimeout(params, 35000); // url为访问地址 HttpPost request = new HttpPost(url); UrlEncodedFormEntity formEntity = new UrlEncodedFormEntity( postParameters,"utf-8"); request.setEntity(formEntity); // 通过execute()执行httppost调用 HttpResponse response = client.execute(request); // 读取返回结果 in = new BufferedReader(new InputStreamReader(response.getEntity() .getContent())); StringBuffer sb = new StringBuffer(""); String line = ""; // 换行操作 String NL = System.getProperty("line.separator"); while ((line = in.readLine()) != null) { sb.append(line + NL); } in.close(); result = sb.toString(); Log.d("返回数据", result); } catch (Exception e) { result = "NetError"; Log.i("Error", "Exception"+e.getMessage()); } finally { if (in != null) { try { in.close(); } catch (IOException e) { e.printStackTrace(); } } } return result; }
其实执行请求就是client.execute(request);将设置超时放在执行之前就OK了,可以控制超时随心所欲了,以前一直没注意这个问题,看了一下以前的代码,有好几处写在了execute()之后,所以感觉上是控制时间老不对,其实走的超时是默认的超时!不知道童鞋们有没有遇到同样的问题!