原文地址:http://liangruijun.blog.51cto.com/3061169/803097


在Android开发中,Android SDK附带了Apache的HttpClient,它是一个完善的客户端。它提供了对HTTP协议的全面支持,可以使用HttpClient的对象来执行HTTP GET和HTTP POST调用。

HTTP工作原理:

1.客户端(一般是指浏览器,这里是指自己写的程序)与服务器建立连接

2.建立连接后,客户端向服务器发送请求

3.服务器接收到请求后,向客户端发送响应信息

4.客户端与服务器断开连接

HttpClient的一般使用步骤:

1.使用DefaultHttpClient类实例化HttpClient对象

2.创建HttpGet或HttpPost对象,将要请求的URL通过构造方法传入HttpGet或HttpPost对象。

3.调用execute方法发送HTTP GET或HTTP POST请求,并返回HttpResponse对象。

4.通过HttpResponse接口的getEntity方法返回响应信息,并进行相应的处理。

最后记得要在AndroidManifest.xml文件添加网络权限

<uses-permission android:name="android.permission.INTERNET" />

下面是具体的例子:

实例1.使用HttpClient来执行GET调用

在LogCat窗口就能看到输出的信息

        
  1. packagecom.lingdududu.http;
  2. importjava.io.InputStream;
  3. importorg.apache.http.HttpResponse;
  4. importorg.apache.http.HttpStatus;
  5. importorg.apache.http.client.HttpClient;
  6. importorg.apache.http.client.methods.HttpGet;
  7. importorg.apache.http.impl.client.DefaultHttpClient;
  8. importandroid.app.Activity;
  9. importandroid.os.Bundle;
  10. importandroid.util.Log;
  11. publicclassHttpGetActivityextendsActivity{
  12. Stringuri="http://developer.android.com/";
  13. finalStringTAG_STRING="TAG";
  14. @Override
  15. publicvoidonCreate(BundlesavedInstanceState){
  16. super.onCreate(savedInstanceState);
  17. setContentView(R.layout.main);
  18. try{
  19. //第一步:得到HttpClient对象,代表一个Http客户端
  20. HttpClientgetClient=newDefaultHttpClient();
  21. //第二步:得到HttpGet对象,代表请求的具体内容
  22. HttpGetrequest=newHttpGet(uri);
  1. //第三步:执行请求。使用HttpClient的execute方法,执行刚才构建的请求
  2. HttpResponseresponse=getClient.execute(request);
  3. //判断请求是否成功
  4. if(response.getStatusLine().getStatusCode()==HttpStatus.SC_OK){
  5. Log.i(TAG_STRING,"请求服务器端成功");
  6. //获得输入流
  7. //第四步:获取HttpResponse中的数据
  8. InputStreaminStrem=response.getEntity().getContent();
  9. intresult=inStrem.read();
  10. while(result!=-1){
  11. System.out.print((char)result);
  12. result=inStrem.read();
  13. }
  14. //关闭输入流
  15. inStrem.close();
  16. }else{
  17. Log.i(TAG_STRING,"请求服务器端失败");
  18. }
  19. }catch(Exceptione){
  20. //TODOAuto-generatedcatchblock
  21. e.printStackTrace();
  22. }
  23. }
  24. }

使用HTTP GET调用有一个缺点就是,请求的参数作为URL一部分来传递,以这种方式传递的时候,URL的长度应该在2048个字符之内。如果超出这个这范围,就要使用到HTTP POST调用。


实例2.使用HttpClient来执行POST调用

使用POST调用进行参数传递时,需要使用NameValuePair来保存要传递的参数。NameValuePair封装了一个键/值组合。另外,还需要设置所使用的字符集。

        
  1. packagecom.androidbook.services.httppost;
  2. importjava.io.BufferedReader;
  3. importjava.io.IOException;
  4. importjava.io.InputStreamReader;
  5. importjava.util.ArrayList;
  6. importjava.util.List;
  7. importorg.apache.http.HttpResponse;
  8. importorg.apache.http.NameValuePair;
  9. importorg.apache.http.client.HttpClient;
  10. importorg.apache.http.client.entity.UrlEncodedFormEntity;
  11. importorg.apache.http.client.methods.HttpPost;
  12. importorg.apache.http.impl.client.DefaultHttpClient;
  13. importorg.apache.http.message.BasicNameValuePair;
  14. importandroid.app.Activity;
  15. importandroid.os.Bundle;
  16. publicclassHttpPostActivityextendsActivity{
  17. Stringuri="http://developer.android.com/";
  18. @Override
  19. publicvoidonCreate(BundlesavedInstanceState){
  20. super.onCreate(savedInstanceState);
  21. setContentView(R.layout.main);
  22. BufferedReaderin=null;
  23. try{
  24. //第一步:创建HttpClient对象,代表客户端
  25. HttpClientclient=newDefaultHttpClient();
  26. //第二步:创建HttpPost请求
  27. HttpPostrequest=newHttpPost("http://code.google.com/android/");
  28. //第三步:创建HttpPost请求体,使用NameValuePair来保存要传递的Post参数
  29. List<NameValuePair>postParameters=newArrayList<NameValuePair>();
  30. //添加要传递的参数
  31. postParameters.add(newBasicNameValuePair("id","12345"));
  32. postParameters.add(newBasicNameValuePair("username","dave"));
  33. //实例化UrlEncodedFormEntity对象
  34. UrlEncodedFormEntityformEntity=newUrlEncodedFormEntity(
  35. postParameters);
  36. //使用HttpPost对象来设置UrlEncodedFormEntity的Entity
  37. request.setEntity(formEntity);
  38. //第四步:执行请求,获得HttpServer的响应
  39. HttpResponseresponse=client.execute(request);
//第五步:获取HttpResponse中的数据
  1. in=newBufferedReader(
  2. newInputStreamReader(
  3. response.getEntity().getContent()));
  4. StringBufferstring=newStringBuffer("");
  5. StringlineStr="";
  6. while((lineStr=in.readLine())!=null){
  7. string.append(lineStr+"\n");
  8. }
  9. in.close();
  10. StringresultStr=string.toString();
  11. System.out.println(resultStr);
  12. }catch(Exceptione){
  13. //Dosomethingaboutexceptions
  14. }finally{
  15. if(in!=null){
  16. try{
  17. in.close();
  18. }catch(IOExceptione){
  19. e.printStackTrace();
  20. }
  21. }
  22. }
  23. }
  24. }

更多相关文章

  1. Android的Service深入分析(全)
  2. Android(安卓)原生webview传递header前端H5如何接收
  3. Android(安卓)6.0以上系统使用RxPermissions申请动态权限
  4. SharedPreferences最佳实践
  5. Android(安卓)使用Gson解析json用法
  6. Android(安卓)Monitor使用介绍
  7. Android(安卓)Intent设置类型setType();
  8. android:Activity数据传递之对象(Serializable)
  9. Android进阶(十六)子线程调用Toast报Can't create handler insid

随机推荐

  1. 怎样查看apk须要支持的Android版本号
  2. Android下Service入门
  3. Android常见错误处理
  4. Android官方DataBinding(三):RecyclerView
  5. 大话Android的消息机制(Handler、Looper
  6. Android_RelativeLayout属性大全
  7. 使用PHP开发Android应用程序技术介绍
  8. Android(一)Android(安卓)Eclipse环境搭建
  9. Android(安卓)SAX 解析XML的Demo
  10. Android(安卓)AsyncTask