安卓不允许在主线程进行http请求,所以需要先使用AsyncTask实现异步任务。
public class HttpPostTask extends AsyncTask<String,Integer,String> {
@Override protected String doInBackground(String... params) { return get(params[0]); } /** * 这里的String参数对应AsyncTask中的第三个参数(也就是接收doInBackground的返回值) * 在doInBackground方法执行结束之后在运行,并且运行在UI线程当中 可以对UI空间进行设置 */ @Override protected void onPostExecute(String result) { callBackService.callback(result); } }
在doinbackground方法里实现你需要执行的任务,任务完成后onPostExecute方法。
实现异步任务之后就可以开始httpclient了。
1.创建一个HttpPost,如果是get请求可以创建HttpGet
2.将你的请求数据添加到entity中,httpclient会自动将他封装到http请求的body中
3.执行excute方法,获得response
4.从response中获取entity,这个entity就是response的body内容
示例代码如下
public String get(String url){ //将你的url放到post中 HttpPost postMethod = new HttpPost(url); HttpClient httpClient = new DefaultHttpClient(); try { if(jsonObject!=null){ //设置http请求的body,这里我传入了json数据 StringEntity entity=new StringEntity(jsonObject.toString(),"utf-8"); entity.setContentType("application/json"); postMethod.setEntity(entity); } //执行post请求,获得response HttpResponse response = httpClient.execute(postMethod); StringBuilder builder = new StringBuilder(); //从response中获取body里面的内容 BufferedReader bufferedReader2 = new BufferedReader( new InputStreamReader(response.getEntity().getContent())); //逐行读取内容 for (String s = bufferedReader2.readLine(); s != null; s = bufferedReader2 .readLine()) { builder.append(s); } return builder.toString(); } catch (ClientProtocolException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } return null; }