android 学习笔记 使用HttpClient

  HttpClient是Apache提供的HTTP网络访问接口,从一开始的时候就被引入到了Android API中。它可以完成和HttpURLConnection几乎一模一样的效果,但两者之间的用法却有较大的差别,那么我们自然要看一下HttpClient是如何使用的了。 

    首先你需要知道,HttpClient是一个接口,因此无法创建它的实例,通常情况下都会创建一个DefaultHttpClient的实例,如下所示: 

 HttpClient httpClient = new DefaultHttpClient(); 

 接下来如果想要发起一条GET请求,就可以创建一个HttpGet对象,并传入目标的网络地址,然后调用HttpClient的execute()方法即可: 

HttpGet httpGet = new HttpGet("http://www.baidu.com"); 
    httpClient.execute(httpGet); 

如果是发起一条POST请求会比GET稍微复杂一点,我们需要创建一个HttpPost对象,并传入目标的网络地址,如下所示: 

HttpPost httpPost = new HttpPost("http://www.baidu.com"); 

然后通过一个NameValuePair集合来存放待提交的参数,并将这个参数集合传入到一个UrlEncodedFormEntity中,然后调用HttpPost的setEntity()方法将构UrlEncodedFormEntity 
传入,如下所示: 

List<NameValuePair> params = new ArrayList<NameValuePair>(); 
    params.add(new BasicNameValuePair("username", "admin")); 

    params.add(new BasicNameValuePair("password", "123456")); 
    UrlEncodedFormEntity entity = new UrlEncodedFormEntity(params, "utf-8"); 

    httpPost.setEntity(entity); 

  接下来的操作就和HttpGet一样了,调用HttpClient的execute()方法,并将HttpPost对象传入即可: 

 httpClient.execute(httpPost); 

  执行execute()方法之后会返回一个HttpResponse对象,服务器所返回的所有信息就会包含在这里面。通常情况下我们都会先取出服务器返回的状态码,如果等于200就说明请求和 响应都成功了,如下所示: 

 if (httpResponse.getStatusLine().getStatusCode() == 200) { 

               // 请求和响应都成功了 
           } 
  接下来在这个if判断的内部取出服务返回的具体内容,可以调用getEntity()方法获取到 一个HttpEntity实例,然后再用EntityUtils.toString()这个静态方法将HttpEntity转换成字符串即可,如下所示: 
           HttpEntity entity = httpResponse.getEntity(); 
           String response = EntityUtils.toString(entity); 
 注意如果服务器返回的数据是带有中文的,直接调用EntityUtils.toString()方法进行转换会有乱码的情况出现,这个时候只需要在转换的时候将字符集指定成utf-8就可以了,如下所示: 

String response = EntityUtils.toString(entity, "utf-8");

下面是整个代码的意思:

 public class MainActivity extends Activity implements OnClickListener { 

               …… 
               @Override 

               public void onClick(View v) { 
                   if (v.getId() == R.id.send_request) { 

                       sendRequestWithHttpClient(); 
                   } 

               } 

               private void sendRequestWithHttpClient() { 
                   new Thread(new Runnable() { 

                       @Override 
                       public void run() { 

                           try { 
                               HttpClient httpClient = new DefaultHttpClient(); 

                               HttpGet httpGet = new HttpGet("http://www.baidu.com"); 
                               HttpResponse httpResponse = httpClient.execute(httpGet); 

                               if (httpResponse.getStatusLine().getStatusCode()== 200) { 
                                   // 请求和响应都成功了 

                                   HttpEntity entity = httpResponse.getEntity(); 
                                   String response = EntityUtils.toString(entity, "utf-8"); 

                         Message message = new Message(); 
                         message.what = SHOW_RESPONSE; 

                         // 将服务器返回的结果存放到Message中 
                         message.obj = response.toString(); 

                         handler.sendMessage(message); 
                      } 

                  } catch (Exception e) { 
                      e.printStackTrace(); 

                  } 
               } 

           }).start(); 
        } 

       …… 
    } 




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值