• Android之Web通信的使用


    一、了解Android网络基础

      1、Android平台有三种网络接口可以使用

        a、标准Java接口 java.net.* 

        b、Apache接口 org.apache.*(开源项目HttpClient)

        c、Android网络接口 android.net.* 

    二、掌握Android应用的HTTP通信

      1、HTTP:超文本传输协议(Hyper Text Transfer Protocol)

      2、采用请求/响应模式

      3、Android提供了HttpURLConnection和HttpClient接口

    三、HttpURLConnection接口

      1、HttpURLConnection是Java的标准类,继承自URLConnection类。他们都是抽象类无法实例化对象。

      a、主要是通过URL的openConnection方法获得创建连接,代码如下:

    URL ur l= new URL(“http://www.google.com”); 
    HttpURLConnection urlConn = (HttpURLConnection) url.openConnection();

      b、默认使用Get方式,这需要通过url传递参数即可

    URL url=new URL("http:www.google.com?parameter=bruce");
    HttpURLConnection urlConn=(HttpURLConnection)url.openConnection();

      c、使用Post方式,则需要setRequestMethod设置

    // 设置以POST方式
    urlConn.setRequestMethod("POST");
    
    //设置连接超时时间,单位:毫秒
    urlConn.setConnectTimeout(10*1000);
    //设置读取超时时间,单位:毫秒
    urlConn.setReadTimeout(15*1000);
    //设置是否允许接收服务器端响应内容,默认true
    urlConn.setDoInput(true);
    //设置是否允许构建一个输出流向服务器传递数据,默认false
    urlConn.setDoOutput(true);
    //设置是否使用缓存,POST不能使用缓存
    urlConn.useCache(false);
    //建立连接
    urlConn.connect();

      d、获取网络图片,只需要将得到的数据流转换成bitmap就可以了

    //创建HttpURLConnection
    HttpURLConnection conn=(HttpURLConnection)iamgeUrl.openConnection();
    //设置是否允许接收服务器端响应内容(默认为true) conn.setDoInput(
    true);
    //建立连接 conn.connect();
    //构建输入流 InputStream stream
    =conn.getInputStream();
    //将数据流转换成Bitmap bitmap
    =BitmapFactory.decodeStream(stream);
    //关闭流 is.close();

     四、HttpClient

            一、Apache提供的HttpClient也适合我们在Android上开发互联网应用

        1、ClientConnectionManager接口

          a、客户端连接管理的接口

        2、DefaultHttpClient

          a、默认的HTTP客户端,可以使用创建HTTP连接

        3、HttpResponse

          a、一个Http连接响应,通过它可以得到返回的响应消息

      二、实现步骤

        1、使用HttpClient需要以下五个步骤;

          a、使用DefaultHttpClient实例化HttpClient对象。

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

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

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

          e、释放连接。无论执行方法是否成功,都必须释放连接。  

        2、使用Get方式提交请求

    //HttpGet连接对象
    HttpGet httpRequest = new HttpGet(httpUrl);
    //取得HttpClient对象
    HttpClient httpclient = new DefaultHttpClient();
    //请求HttpClient,取得HttpResponse
    HttpResponse httpResponse = httpclient.execute(httpRequest);

        3、根据响应的代码判断请求是否成功

    //请求成功
    if (httpResponse.getStatusLine().getStatusCode() == HttpStatus.SC_OK){
    
    }

        4、代码(GET)

    //构建HttpClient的实例
    DefaultHttpClient httpClient=new DefaultHttpClient();
    //创建Get实例
    HttpGet get=new HttpGet("http://www.baidu.com");
    try{
        //发送请求并得到响应结果
        HttpResponse res=httpClient.execute(get);
        //处理响应结果数据
        if(res != null && res.getStatusLine().getStatusCode() == HttpStaatus.SC_OK){
              System.out.println(EntityUtils.toString(res.getEmtity()));
        } 
    }catch(Exception ex){
          ex.printStackTrace();      
    }finally{
          //释放资源
          httpClient.getConnectionManager().shutdown();
    }    

        5、使用Post方式提交请求

    //HttpPost连接对象
    HttpPost HTTPRequest=new HttpPost(httpUrl);

        6、使用NameValuePair来保存要传递的参数

    //使用NameValuePair来保存要传递的Post参数
    List<NameValuePair>params=new ArrayList<NameValuePair>();
    //添加要传递的参数
    params.add(new BasicNameValuePair("pair","HttpClient_android_Post"));

        7、同样是通过HTTP客户端提交请求

    //设置字符集
    HTTPEntity httpentity=new UrlEncodedFormEntity(params,"utf-8");
    //请求httpRequest
    HttpRequest.setEntity(httpentity);
    
    //取得默认的HttpClient
    HttpClient httpclient=new DefaultHttpClient();
    //提交请求
    httpclient.execute(httpRequest);

        8、代码POST

    //构建HttpClient实例
    DefaultHttpClient httpClient = new DefaultHttpClient();
    //创建Post实例
    HttpPost post = new HttpPost("http://www.baidu.com")
    //初始化请求参数
    List<NameValuePair> params = new ArrayList<NameValuePair>();
    params.add(new BasicNameValuePair("stuNo","123456"));
    params.add(new BasicNameValuePair("stuName","zhangsan"));
    params.add(new BasicNameValuePair("stuSex","男"));
    params.add(new BasicNameValuePair("stuTemp","1997-1-1"));
    params.add(new BasicNameValuePair("stuAddress","zhuhai"));
    try{
         //设置请求参数,并以UTF-8方式编码
         post.setEntity(new UrlEncodedFormEntity(params,"UTF-8"));
         //发送请求并得到响应结果
         HttpResponse res=httpClient.execute(post);
         //处理响应结果数据
         if(res != null && res.getStatusLine().getStatusCode() == HttpStatus.SC_OK){
               System.out.println(EntityUtils.toString(res.getEntity()));  
         }
    }catch(Exception ex){
          ex.printStackTrace();  
    }finally{
          //释放资源
          httpClient.getConnectionManager().shutdown();
    }

        9、实时更新可以在客户端通过线程不听的请求并刷新页面

        10、不能直接在线程中更新UI,需要使用Handler来实现,代码如下:

    Handler mHandler=new Handler(){
      public void handleMessage(Message msg){
          super.handleMessage(msg);
          //刷新
          refresh();  
      }  
    }

  • 相关阅读:
    以前给工大软件学院作得首页
    rinruby
    螃蟹为什么煮熟后会变红?
    关于R中利用apply、tapply、lapply、sapply、mapply、table
    hp laserjet 1020驱动 for windows
    关于睡觉巻起来姿势
    王强英語
    进程的前后台切换
    研究生=烟酒生
    计算矩阵乘法的网页工具
  • 原文地址:https://www.cnblogs.com/zhangmawang/p/8109557.html
Copyright © 2020-2023  润新知