• Android开发之网络请求HttpURLConnection


    转:http://blog.csdn.net/guolin_blog/article/details/12452307

    Android中主要提供了两种方式来进行HTTP操作,HttpURLConnection和HttpClient。

    这两种方式都支持HTTPS协议、以流的形式进行上传和下载、配置超时时间、IPv6、以及连接池等功能。

    HttpClient

    DefaultHttpClient和它的兄弟AndroidHttpClient都是HttpClient具体的实现类,它们都拥有众多的API,而且实现比较稳定,bug数量也很少。

    但同时也由于HttpClient的API数量过多,使得我们很难在不破坏兼容性的情况下对它进行升级和扩展,所以目前Android团队在提升和优化HttpClient方面的工作态度并不积极。

    HttpURLConnection

    HttpURLConnection是一种多用途、轻量极的HTTP客户端,使用它来进行HTTP操作可以适用于大多数的应用程序。虽然HttpURLConnection的API提供的比较简单,但是同时这也使得我们可以更加容易地去使用和扩展它。

    哪一种才是最好的?

    在Android 2.2版本之前,HttpClient拥有较少的bug,因此使用它是最好的选择。

    而在Android 2.3版本及以后,HttpURLConnection则是最佳的选择。它的API简单,体积较小,因而非常适用于Android项目。压缩和缓存机制可以有效地减少网络访问的流量,在提升速度和省电方面也起到了较大的作用。对于新的应用程序应该更加偏向于使用

    HttpURLConnection代码:

     1 private void checkVersion() {
     2         final long startTime = System.currentTimeMillis();
     3         new Thread(new Runnable() {
     4             @Override
     5             public void run() {
     6                 Message msg = mHandler.obtainMessage();
     7                 HttpURLConnection conn = null;
     8                 try {
     9                     URL url = new URL("http://10.0.2.2:8080/update.json");
    10                     conn = (HttpURLConnection) url.openConnection();
    11                     conn.setRequestMethod("GET");  //请求方法为GET
    12                     conn.setConnectTimeout(5000);  //链接超时为5秒
    13                     conn.setReadTimeout(5000);     //读取超时为5秒
    14                     conn.connect();
    15                     int responseCode = conn.getResponseCode();
    16                     if ( responseCode == 200 ) {
    17                         InputStream inputStream = conn.getInputStream();
    18                         String result = StreamUtils.readFromStream(inputStream);
    19                         VersionBean versionBean = parseJsonWithGson(result);
    20                         mVersionName = versionBean.getVersionName();
    21                         mDescription = versionBean.getDescription();
    22                         mVersionCode = versionBean.getVersionCode();
    23                         mDownLoadUrl = versionBean.getDownLoadUrl();
    24                         LogUtils.e(TAG, mDownLoadUrl);
    25                         if ( mVersionCode > getAppVersionCode() ) {
    26                             msg.what = CODE_UPDATE_INFO;
    27                         } else {
    28                             msg.what = CODE_GO_HOME;
    29                         }
    30                     }
    31                 } catch ( MalformedURLException e ) {
    32                     msg.what = CODE_URL_ERROR;
    33                     e.printStackTrace();
    34                 } catch ( IOException e ) {
    35                     msg.what = CODE_NETWORK_ERROR;
    36                     e.printStackTrace();
    37                 } finally {
    38                     long endTime = System.currentTimeMillis();
    39                     long timeUsed = endTime - startTime;
    40                     if ( timeUsed < 2000 ) {
    41                         try {
    42                             Thread.sleep(2000 - timeUsed);
    43                         } catch ( InterruptedException e ) {
    44                             e.printStackTrace();
    45                         }
    46                     }
    47                     mHandler.sendMessage(msg);
    48                     if ( conn != null ) {
    49                         conn.disconnect();
    50                     }
    51                 }
    52 
    53             }
    54         }).start();
    55     }
  • 相关阅读:
    topK问题 前K个高频元素 leetcode692
    反转链表 leetcode206
    关于IO多路复用的简单整理
    两数之和 leetcode1
    使用 jenkins 发布 前端 项目
    CentOS7 部署 nacos 集群
    JWT
    keepalived 的 unicast 单播模式
    使用 keepalived 高可用 nginx
    翻转二叉树 leetcode226
  • 原文地址:https://www.cnblogs.com/liyiran/p/5315527.html
Copyright © 2020-2023  润新知