Android开发之网络请求HttpURLConnection
2016-03-24 14:47
127 查看
转:http://blog.csdn.net/guolin_blog/article/details/12452307
Android中主要提供了两种方式来进行HTTP操作,HttpURLConnection和HttpClient。
这两种方式都支持HTTPS协议、以流的形式进行上传和下载、配置超时时间、IPv6、以及连接池等功能。
但同时也由于HttpClient的API数量过多,使得我们很难在不破坏兼容性的情况下对它进行升级和扩展,所以目前Android团队在提升和优化HttpClient方面的工作态度并不积极。
而在Android 2.3版本及以后,HttpURLConnection则是最佳的选择。它的API简单,体积较小,因而非常适用于Android项目。压缩和缓存机制可以有效地减少网络访问的流量,在提升速度和省电方面也起到了较大的作用。对于新的应用程序应该更加偏向于使用
HttpURLConnection代码:
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代码:
private void checkVersion() { final long startTime = System.currentTimeMillis(); new Thread(new Runnable() { @Override public void run() { Message msg = mHandler.obtainMessage(); HttpURLConnection conn = null; try { URL url = new URL("http://10.0.2.2:8080/update.json"); conn = (HttpURLConnection) url.openConnection(); conn.setRequestMethod("GET"); //请求方法为GET conn.setConnectTimeout(5000); //链接超时为5秒 conn.setReadTimeout(5000); //读取超时为5秒 conn.connect(); int responseCode = conn.getResponseCode(); if ( responseCode == 200 ) { InputStream inputStream = conn.getInputStream(); String result = StreamUtils.readFromStream(inputStream); VersionBean versionBean = parseJsonWithGson(result); mVersionName = versionBean.getVersionName(); mDescription = versionBean.getDescription(); mVersionCode = versionBean.getVersionCode(); mDownLoadUrl = versionBean.getDownLoadUrl(); LogUtils.e(TAG, mDownLoadUrl); if ( mVersionCode > getAppVersionCode() ) { msg.what = CODE_UPDATE_INFO; } else { msg.what = CODE_GO_HOME; } } } catch ( MalformedURLException e ) { msg.what = CODE_URL_ERROR; e.printStackTrace(); } catch ( IOException e ) { msg.what = CODE_NETWORK_ERROR; e.printStackTrace(); } finally { long endTime = System.currentTimeMillis(); long timeUsed = endTime - startTime; if ( timeUsed < 2000 ) { try { Thread.sleep(2000 - timeUsed); } catch ( InterruptedException e ) { e.printStackTrace(); } } mHandler.sendMessage(msg); if ( conn != null ) { conn.disconnect(); } } } }).start(); }
相关文章推荐
- HTTP POST GET 本质区别详解
- Glide 入门到精通之十六——Module 实例:接受自签名证书的 HTTPS
- 使用netty实现的tcp通讯中如何实现同步返回
- 情感分析利器——Doc2vec
- HTTP中Get与Post的区别
- SYN(synchronous)是TCP/IP建立连接时使用的握手信号
- TCP/IP传送方式有三种:单播,广播,组播
- httpPost提交数据
- 神经网络用于多分类的一个疑问
- 深入理解Java的接口和抽象类 (http://www.cnblogs.com/dolphin0520/p/3811437.html)
- CentOS7 网络管理与配置
- 网络驱动设备:ISCSI实战!!!
- NSURLSession网络请求
- AsyncHttpClient, RequestParams ,AsyncHttpResponseHandler三个类使用方法
- pycnn以多项式为例的动态网络结构
- 使用 python 创建最简单的 https 服务器
- 关于TCP流模式与UDP数据报模式的区别
- 三种经典iPhone上网络抓包方法详解
- TCP/IP面试题整理
- Volley+OkHttp的整合