Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> Android編程入門 >> Android開發之網絡請求HttpURLConnection

Android開發之網絡請求HttpURLConnection

編輯:Android編程入門

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();
     }
  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved