Android學習筆記21:ImageView擷取網狀圖片

來源:互聯網
上載者:User

Android平台有3種網路介面可以使用,它們分別是:java.net.*(標準java介面)、org.apache(Apache介面)和android.net.*(Android網路介面)。本文將使用java.net.*(標準java介面)來實現擷取一張網狀圖片,並將其顯示在ImageView控制項中。

  java.net.*(標準java介面)提供了與網路有關的類,包括流和資料包通訊端、Internet協議、常見Http處理(比如,建立URL以及URLConnection/HttpURLConnection對象、設定串連參數、串連到伺服器、向伺服器寫資料、從伺服器讀取資料等)。

  下面便來說說HttpURLConnection介面的使用方法。

1.HttpURLConnection

1.1HttpURLConnection的常用方法

  在Android的應用開發中,HttpURLConnection的常用方法有以下一些:

abstract void discontent();     //關閉此連結

String getContentEncoding();     //擷取傳輸響應體的編碼

InputStream getErrorStream();      //擷取從伺服器返回的錯誤流

String getRequestMethod();          //擷取請求遠程HTTP伺服器的要求方法

int getResponseCode();               //擷取響應遠程HTTP伺服器的響應值

String getResponseMessage();      //擷取響應遠程HTTP伺服器的響應訊息

void setRequestMethod(String mothod);               //佈建要求遠程HTTP伺服器的要求方法

1.2幾個常用的伺服器響應值

  當我們串連了某一伺服器後,需要使用getResponseCode()方法來擷取伺服器的響應值,並以此來判斷網路連接是否正常。常用的幾個伺服器響應值如下:

HTTP_BAD_GATEWAY               //502網關錯誤

HTTP_BAD_REQUEST                //400請求錯誤

HTTP_CLIENT_TIMEOUT            //408用戶端逾時

HTTP_NOT_FOUND                   //404未找到伺服器

HTTP_OK                                //200正常串連

HTTP_UNAVAILABLE                 //503網路不可用

1.3執行個體

  要將一張網狀圖片顯示在ImageView控制項中,首先需要從網路上擷取該圖片資源,下面的代碼實現了這一功能,並將擷取的圖片資源以流的形式返回。


 1 /**
 2      * 從網路中擷取圖片,以流的形式返回
 3      * @return
 4      */
 5     public static InputStream getImageViewInputStream() throws IOException {
 6         InputStream inputStream = null;
 7         URL url = new URL(URL_PATH);                    //伺服器位址
 8         if (url != null) {
 9             //開啟串連
10             HttpURLConnection httpURLConnection = (HttpURLConnection)url.openConnection();
11             httpURLConnection.setConnectTimeout(3000);//設定網路連接逾時的時間為3秒
12             httpURLConnection.setRequestMethod("GET");        //佈建要求方法為GET
13             httpURLConnection.setDoInput(true);                //開啟輸入資料流
14             int responseCode = httpURLConnection.getResponseCode();    // 擷取伺服器響應值
15             if (responseCode == HttpURLConnection.HTTP_OK) {        //正常串連
16                 inputStream = httpURLConnection.getInputStream();        //擷取輸入資料流
17             }
18         }
19         return inputStream;
20     }
  對以上代碼,有以下幾點需要說明:

  (1)由於是串連網路,不免會出現一些異常情況,所以在代碼中使用了throws IOException來拋出異常。在調用該函數時就可以使用try-catch來捕獲異常,並針對異常情況做對應的處理。

  (2)語句URL url = new URL(URL_PATH);指定了伺服器的路徑,也就是我們要訪問的網狀圖片的地址。那麼如何將一張圖片發布到伺服器上呢?這裡,我們可以通過使用MyEclipse和Tomcat來完成伺服器的構建(構建方法可以參考《Android學習筆記20:Http協議及Java Web編程》 構建好了該伺服器之後,只需要將該圖片放到工程的WebRoot目錄下,然後啟動該工程,我們就可以通過URL_PATH路徑訪問到伺服器上的圖片了。

  (3)因為在該工程中使用到了網路資源,所以我們還需要在AndroidManifest.xml中開啟網路的存取權限,實現的方法很簡單,在AndroidManifest.xml檔案中加入以下一段代碼即可。

1   <uses-permission
2           android:name="android.permission.INTERNET"  >
3   </uses-permission>
  至此,我們完成了從伺服器上以流的形式擷取一張圖片資源,那麼如何利用該圖片資源流來建立一張Bitmap圖片呢?這裡,我們可以使用BitmapFactory對象的Static Bitmap decodeStream(InputStream inputStream)方法依據輸入資料流來建立一張Bitmap圖片,然後通過使用ImageView的setImageBitmap(Bitmap bitmap)方法將該Bitmap圖片添加到ImageView控制項中進行顯示,具體的實現代碼如下:


1   try {
2       InputStream inputStream = HttpUtils.getImageViewInputStream();
3       Bitmap bitmap = BitmapFactory.decodeStream(inputStream);
4       mImageView.setImageBitmap(bitmap);
5   } catch (IOException e) {
6              
7   }
1.4執行個體效果

  在本執行個體中,向myhttp工程的WebRoot目錄中添加了一張圖片cat.jpg(1024*768),作為網路資源圖片,運行該工程後可以在瀏覽器中看到該資源圖片的顯示效果1所示。

 

圖1 資源圖片在瀏覽器中顯示效果

  從伺服器上擷取該圖片資源並將其顯示在ImageView控制項中的效果2所示。

 

圖2 網狀圖片在ImageView中的顯示效果

 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.