HttpURLConnection,HttpClient的简单使用

HttpURLConnection

在android 2.2及以下版本中HttpUrlConnection存在着一些bug(建议使用HttpClient)
建议在android 2.3以后使用HttpUrlConnection

特点

• 比较轻便,灵活,易于扩展

• 在3.0后以及4.0中都进行了改善,如对HTTPS的支持

• 在4.0中,还增加了对缓存的支持


HttpClient(不推荐使用了)

特点

• 高效稳定,但是维护成本高昂,故android 开发团队不愿意在维护该库而是转投更为轻便的

在android2.3之后就被HttpUrlConnection取代了


OK,扯了这么多,直接开始实战。

前期准备

开发工具:Eclipse(ADT Build: v22.6.2-1085508)
开发环境:OS X EI Capitan 版本 10.11.5
搭建一个本地的测试服务用来测试访问
首先安装MAMP,用来部署测试数据:

HttpURLConnection,HttpClient的简单使用_第1张图片
Paste_Image.png

传送门: https://www.mamp.info/en/
配置端口
HttpURLConnection,HttpClient的简单使用_第2张图片
Paste_Image.png

文件部署目录

HttpURLConnection,HttpClient的简单使用_第3张图片
Paste_Image.png
HttpURLConnection,HttpClient的简单使用_第4张图片
Paste_Image.png

get_data.json文件从项目Assets目录下获取


HttpURLConnection,HttpClient的简单使用_第5张图片
Paste_Image.png

OK,前期准备工作完毕。

代码演示

源码地址
https://github.com/andli0626/HttpClientAndHttpUrlConnection.git
实际效果

HttpURLConnection,HttpClient的简单使用_第6张图片
Paste_Image.png

HttpURLConnection请求:GET 核心代码

  private void sendRequestWithHttpURLConnection() {
    // 开启线程来发起网络请求
    new Thread(new Runnable() {
     @Override
     public void run() {
      HttpURLConnection connection = null;
      try {
       // 获得URL对象
       URL url = new URL("http://www.baidu.com/");
       // 获得HttpURLConnection对象
       connection = (HttpURLConnection) url.openConnection();
       // 默认为GET请求
       connection.setRequestMethod("GET");
       // 设置 链接 超时时间
       connection.setConnectTimeout(8000);
       // 设置 读取 超时时间
       connection.setReadTimeout(8000);
       // 设置是否从HttpURLConnection读入,默认为true
       connection.setDoInput(true);
       connection.setDoOutput(true);
 
       // 请求相应码是否为200(OK)
       if(connection.getResponseCode() == HttpURLConnection.HTTP_OK){
        // 下面对获取到的输入流进行读取
        InputStream in          = connection.getInputStream();
        BufferedReader reader   = new BufferedReader(new InputStreamReader(in));
        StringBuilder  response = new StringBuilder();
        String line;
        while ((line = reader.readLine()) != null) {
         response.append(line);
        }
        Message message = new Message();
        message.what  = SHOW_RESPONSE1;
        message.obj  = response.toString();
        handler.sendMessage(message);
       }else{
        Message message = new Message();
        message.what  = SHOW_RESPONSE3;
        handler.sendMessage(message);
       }
 
      } catch (Exception e) {
             e.printStackTrace();
      } finally {
             // 关闭连接
             if (connection != null) {
              connection.disconnect();
       }
      }
     }
    }).start();
   }

HttpClient GET请求核心代码

 private void sendRequestWithHttpClient() {
   new Thread(new Runnable() {
    @Override
    public void run() {
          try {
           HttpClient httpClient = new DefaultHttpClient();
           // 指定访问的服务器地址是电脑本机
           // 注意:由于是本机测试,所以测试设备和接口必须在同一网段内,否则访问失败
           HttpGet httpGet = new HttpGet("http://192.168.0.162:8082/get_data.json");
           HttpResponse httpResponse = httpClient.execute(httpGet);
           if (httpResponse.getStatusLine().getStatusCode() == 200) {
            // 请求和响应都成功了
            HttpEntity entity = httpResponse.getEntity();
            String response = EntityUtils.toString(entity, "utf-8");
            // 解析JSON
            parseJSONWithGSON(response);
  
             Message message = new Message();
             message.what    = SHOW_RESPONSE2;
             message.obj     = response.toString();
             handler.sendMessage(message);
      }
     } catch (Exception e) {
           e.printStackTrace();
     }
    }
   }).start();
  }

参考资料

《第一行代码》
http://www.tuicool.com/articles/Yjq6niQ

你可能感兴趣的:(HttpURLConnection,HttpClient的简单使用)