Android开发之网络请求HttpURLConnection
最后更新 2021-02-15 10:26 星期一 所属:
安卓教程 浏览:545
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(); }