zoukankan      html  css  js  c++  java
  • android 网络编程 HttpGet类和HttpPost类使用详解

     虽然在登录系统中使用了Web Service与服务端进行交互。但是在传递大量的数量时,Web Service显得有些笨拙。在本节将介绍移动电子相册中使用的另外一种与数据库交互的方法。直接发送HTTP GETPOST请求。这就要用到HttpGetHttpPost以及HttpURLConnection这些类。

    15.3.1  HttpGet类和HttpPost

    本节将介绍Android SDK集成的Apache HttpClient模块。要注意的是,这里的Apache HttpClient模块是HttpClient 4.0org.apache.http.*),而不是Jakarta Commons HttpClient 3.xorg.apache.commons.httpclient.*)。

    HttpClient模块中用到了两个重要的类:HttpGetHttpPost。这两个类分别用来提交HTTP GETHTTP POST请求。为了测试本节的例子,需要先编写一个Servlet程序,用来接收HTTP GETHTTP POST请求。读者也可以使用其他服务端的资源来测试本节的例子。

    假设192.168.17.81是本机的IP,客户端可以通过如下的URL来访问服务端的资源:

    http://192.168.17.81:8080/querybooks/QueryServlet?bookname=开发

    在这里booknameQueryServlet的请求参数,表示图书名,通过该参数来查询图书信息。

    现在我们要通过HttpGetHttpPost类向QueryServlet提交请求信息,并将返回结果显示在TextView组件中。

    无论是使用HttpGet,还是使用HttpPost,都必须通过如下3步来访问HTTP资源。

    1.创建HttpGetHttpPost对象,将要请求的URL通过构造方法传入HttpGetHttpPost对象。

    2.使用DefaultHttpClient类的execute方法发送HTTP GETHTTP POST请求,并返回HttpResponse对象。

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

    如果使用HttpPost方法提交HTTP POST请求,还需要使用HttpPost类的setEntity方法设置请求参数。

    本例使用了两个按钮来分别提交HTTP GETHTTP POST请求,并从EditText组件中获得请求参数(bookname)值,最后将返回结果显示在TextView组件中。两个按钮共用一个onClick事件方法,代码如下:

    public void onClick(View view)  

    {  

        //  读者需要将本例中的IP换成自己机器的IP  

        String url = "http://192.168.17.81:8080/querybooks/QueryServlet";  

        TextView tvQueryResult = (TextView) findViewById(R.id.tvQueryResult);  

        EditText etBookName = (EditText) findViewById(R.id.etBookName);  

        HttpResponse httpResponse = null;  

        try  

        {  

            switch (view.getId())  

            {  

                //  提交HTTP GET请求  

                case R.id.btnGetQuery:  

                    //  url添加请求参数  

                    url += "?bookname=" + etBookName.getText().toString();  

                    //  1步:创建HttpGet对象  

                    HttpGet httpGet = new HttpGet(url);  

                    //  2步:使用execute方法发送HTTP 
    GET请求,并返回HttpResponse对象  

                    httpResponse = new DefaultHttpClient().execute(httpGet);  

                    //  判断请求响应状态码,状态码为200
    示服务端成功响应了客户端的请求  

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

                    {  

                        //  3步:使用getEntity方法获得返回结果  

                        String result = EntityUtils.
    toString(httpResponse.getEntity());  

                        //  去掉返回结果中的"\r"字符,
    否则会在结果字符串后面显示一个小方格  

                        tvQueryResult.setText(result.replaceAll("\r", ""));  

                    }  

                    break;  

                //  提交HTTP POST请求  

                case R.id.btnPostQuery:  

                    //  1步:创建HttpPost对象  

                    HttpPost httpPost = new HttpPost(url);  

                    //  设置HTTP POST请求参数必须用NameValuePair对象  

                    List<NameValuePair> params = new 
    ArrayList<NameValuePair>();  

                    params.add(new BasicNameValuePair
    ("bookname", etBookName.getText(). toString()));  

                    //  设置HTTP POST请求参数  

                    httpPost.setEntity(new 
    UrlEncodedFormEntity(params, HTTP.UTF_8));  

                    //  2步:使用execute方法发送HTTP 
    POST请求,并返回HttpResponse对象  

                    httpResponse = new DefaultHttpClient().
    execute(httpPost);  

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

                    {  

                        //  3步:使用getEntity方法获得返回结果  

                        String result = EntityUtils.toString
    (httpResponse.getEntity());  

                        //  去掉返回结果中的"\r"字符,
    否则会在结果字符串后面显示一个小方格  

                        tvQueryResult.setText(result.replaceAll("\r", ""));  

                    }  

                    break;  

            }  

        }  

        catch (Exception e)  

        {  

            tvQueryResult.setText(e.getMessage());  

        }  

  • 相关阅读:
    使用C#实现DHT磁力搜索的BT种子后端管理程序+数据库设计(开源)
    便携版WinSCP在命令行下同步文件夹
    ffmpeg (ffprobe)分析文件关键帧时间点
    sqlite删除数据或者表后,回收数据库文件大小
    ubuntu 20.04下 freeswitch 配合 fail2ban 防恶意访问
    ffmpeg使用nvenc编码的结论记录
    PC版跑跑卡丁车 故事模式 亚瑟传说章节 卡美洛庆典 2阶段 心灵之眼 攻略
    There was an error loading or playing the video
    Nvidia RTX Voice 启动报错修复方法
    火狐浏览器 关闭跨域限制
  • 原文地址:https://www.cnblogs.com/qingblog/p/2528834.html
Copyright © 2011-2022 走看看