您的位置:首页 > 理论基础 > 计算机网络

android菜鸟进阶之路—— HttpClient 的实例

2015-09-07 22:35 633 查看
HttpClient 可以完成和 HttpURLConnection 几乎一模一样的效果,但两者之间的用法却有较 大的差别,用法如下,直接贴代码了,在布局文件中是一个按钮和一个TextView,按钮用来发送请求,TextView用来接收服务器返回的消息:
        public class SecondActivity extends Activity implements OnClickListener{
                public static final int SHOW_RESPONSE = 0;
                private Button httpclient_send_request;
                private TextView httpclient_responseText;
                private Handler handler = new Handler(){
                        public void handleMessage(Message msg) {
                                switch (msg.what) {
                                        case SHOW_RESPONSE:
                                        String response = (String) msg.obj;
                                        // 在这里进行UI操作,将结果显示到界面上
                                        httpclient_responseText.setText(response);
                                }
                       }
                };

                @Override
                protected void onCreate(Bundle savedInstanceState) {
                        // TODO Auto-generated method stub
                        super.onCreate(savedInstanceState);
                        setContentView(R.layout.activity_second);
                        httpclient_send_request = (Button) findViewById(R.id.httpclient_send_request);
                        httpclient_responseText = (TextView) findViewById(R.id.tv_httpclient_response);
                        httpclient_send_request.setOnClickListener(this);
                }

                @Override
                public void onClick(View v) {
                        // TODO Auto-generated method stub
                        if(v.getId()==R.id.httpclient_send_request){
                                sendRequestWithHttpClient();
                        }
                }

                private void sendRequestWithHttpClient() {
                        // TODO Auto-generated method stub
                        new Thread(new Runnable(){
                                @Override
                                public void run() {
                                        // TODO Auto-generated method stub
                                        try {
                                                //1,首先,HttpClient 是一个接口,因此无法创建它的实例,通常情况下都会创
                                                //建一个 DefaultHttpClient 的实例
                                                HttpClient httpclient = new DefaultHttpClient();
                                                //2,想要发起一条 GET 请求,就可以创建一个 HttpGet 对象,并传入目标的网络
                                                //地址,然后调用 HttpClient 的 execute()方法
                                                HttpGet httpGet = new HttpGet("http://www.baidu.com");
                                                //3,调用 HttpClient 的 execute()方法,传入HttpGet或HttpPost对象,得到HttpResponse对象
                                                HttpResponse httpResponse = httpclient.execute(httpGet);
                                                if (httpResponse.getStatusLine().getStatusCode() == 200) {
                                                        //4,等于200说明请求和响应都成功了
                                                        //5,调用 getEntity()方法获取到一个 HttpEntity 实例
                                                        HttpEntity entity = httpResponse.getEntity();
                                                        //6,调用 EntityUtils.toString()这个静态方法将 HttpEntity 转换成字符串
                                                        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) {
                                                // TODO Auto-generated catch block
                                                e.printStackTrace();
                                        }
                                }
                        }).start();
                }
        }
        代码的具体解释都在注释中说明,注意第二步代码中给的是GET请求,若为POST请求,则第二步要相应的变化为如下:
        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);
        本文很多内柔源自书本,仅供学习之用。共同进步。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息