Android學習筆記21:ImageView獲取網絡圖片


  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編程》http://www.cnblogs.com/menlsh/archive/2013/01/27/2878638.html)。構建好了該服務器之后,只需要將該圖片放到工程的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中的顯示效果

 

相關資料:

JDK中的URLConnection參數詳解

http://www.blogjava.net/supercrsky/articles/247449.html

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM