Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> Android技術基礎 >> 第101章、讀取網絡圖片(從零開始學Android)

第101章、讀取網絡圖片(從零開始學Android)

編輯:Android技術基礎

Android手機上,我們常用ImageView顯示圖片,我們本章獲取網絡圖片並顯示在ImageView中。

一、設計界面

1、布局文件

打開res/layout/activity_main.xml文件。
輸入以下代碼:

[html] view plain copy  
  1. <?xml version="1.0" encoding="utf-8"?>   
  2. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"   
  3. android:orientation="vertical"   
  4. android:layout_width="match_parent"   
  5. android:layout_height="match_parent" >  
  6.   
  7.     <ImageView  
  8.         android:id="@+id/imagephoto"  
  9.         android:layout_width="wrap_content"  
  10.         android:layout_height="wrap_content" />  
  11.   
  12. </LinearLayout>   

 

二、程序文件

打開“src/com.genwoxue.networkphoto/MainActivity.java”文件。
然後輸入以下代碼:

[java] view plain copy  
  1. package com.genwoxue.networkphoto;  
  2.   
  3. import java.io.IOException;  
  4. import java.io.InputStream;  
  5. import java.net.HttpURLConnection;  
  6. import java.net.MalformedURLException;  
  7. import java.net.URL;  
  8. import android.app.Activity;  
  9. import android.graphics.Bitmap;  
  10. import android.graphics.BitmapFactory;  
  11. import android.os.AsyncTask;  
  12. import android.os.Bundle;  
  13. import android.widget.ImageView;  
  14.   
  15. public class MainActivity extends Activity {  
  16.   
  17.     private ImageView imView;   
  18.     @Override   
  19.     public void onCreate(Bundle savedInstanceState) {    
  20.         super.onCreate(savedInstanceState);    
  21.         setContentView(R.layout.activity_main);    
  22.           
  23.         imView = (ImageView) findViewById(R.id.imagephoto);    
  24.         String imageUrl = "http://img.baidu.com/img/image/ilogob.gif";    
  25.           
  26.         new NetworkPhoto().execute(imageUrl);  
  27.     }  
  28.   
  29.     /* 四個步驟: 
  30.      * (1)onPreExecute(),執行預處理,它運行於UI線程, 
  31.      * 可以為後台任務做一些准備工作,比如繪制一個進度條控件。 
  32.      * (2)doInBackground(Params...),後台進程執行的具體計算在這裡實現, 
  33.      * doInBackground(Params...)是AsyncTask的關鍵,此方法必須重載。 
  34.      * 在這個方法內可以使用 publishProgress(Progress...)改變當前的進度值。 
  35.      * (3)onProgressUpdate(Progress...),運行於UI線程。如果 
  36.      * 在doInBackground(Params...) 中使用了publishProgress(Progress...),就會 
  37.      * 觸發這個方法。在這裡可以對進度條控件根據進度值做出具體的響應。 
  38.      * (4)onPostExecute(Result),運行於UI線程,可以對後台任務的結果做出處理,結果 
  39.      * 就是doInBackground(Params...)的返回值。此方法也要經常重載,如果Result為 
  40.      * null表明後台任務沒有完成(被取消或者出現異常)。    *  
  41.      */  
  42.       
  43.     //本案例我們僅使用了(2)和(4)  
  44.     class NetworkPhoto extends AsyncTask<String, Integer, Bitmap> {   
  45.         public NetworkPhoto() {  
  46.         }  
  47.       
  48.         //doInBackground(Params...),後台進程執行的具體計算在這裡實現,是AsyncTask的關鍵,此方法必須重載。  
  49.         @Override   
  50.         protected Bitmap doInBackground(String... urls) {    
  51.             URL url = null;    
  52.             Bitmap bitmap = null;    
  53.             HttpURLConnection conn=null;    
  54.             InputStream is=null;    
  55.           
  56.             try {     
  57.                 url = new URL(urls[0]);    
  58.             } catch (MalformedURLException e) {    
  59.                 e.printStackTrace();    
  60.             }  
  61.                   
  62.             try {     
  63.                 conn = (HttpURLConnection) url.openConnection();     
  64.                 conn.setDoInput(true);     
  65.                 conn.connect();     
  66.                 is = conn.getInputStream();     
  67.                 bitmap = BitmapFactory.decodeStream(is);     
  68.                 is.close();    
  69.             } catch (IOException e) {     
  70.                 e.printStackTrace();    
  71.             } finally  {     
  72.                 if(conn!=null){      
  73.                     conn.disconnect();      
  74.                     conn=null;     
  75.                 }     
  76.               
  77.                 if(is!=null)   {      
  78.                     try {  
  79.                         is.close();  
  80.                     } catch (IOException e) {  
  81.                       e.printStackTrace();  
  82.                     }      
  83.                     is=null;   
  84.                 }  
  85.             }  
  86.         return bitmap;  
  87.     }  
  88.   
  89.         //onPostExecute(Result),運行於UI線程,可以對後台任務的結果做出處理,結果  
  90.         //就是doInBackground(Params...)的返回值。  
  91.         @Override       
  92.         protected void onPostExecute(Bitmap bitmap) {      
  93.             // 返回結果bitmap顯示在ImageView控件            
  94.             imView.setImageBitmap(bitmap);        
  95.         }    
  96.     }  
  97.   
  98. }  


三、配置文件

打開“AndroidManifest.xml”文件。

然後輸入以下代碼:

[html] view plain copy  
  1. <?xml version="1.0" encoding="utf-8"?>  
  2. <manifest xmlns:android="http://schemas.android.com/apk/res/android"  
  3.     package="com.genwoxue.networkphoto"  
  4.     android:versionCode="1"  
  5.     android:versionName="1.0" >  
  6.   
  7.     <uses-sdk  
  8.         android:minSdkVersion="10"  
  9.         android:targetSdkVersion="14" />  
  10.   
  11.     <uses-permission android:name="android.permission.INTERNET" />  
  12.       
  13.     <application  
  14.         android:allowBackup="true"  
  15.         android:icon="@drawable/ic_launcher"  
  16.         android:label="@string/app_name"  
  17.         android:theme="@style/AppTheme" >  
  18.         <activity  
  19.             android:name="com.genwoxue.networkphoto.MainActivity"  
  20.             android:label="@string/app_name" >  
  21.             <intent-filter>  
  22.                 <action android:name="android.intent.action.MAIN" />  
  23.   
  24.                 <category android:name="android.intent.category.LAUNCHER" />  
  25.             </intent-filter>  
  26.         </activity>  
  27.     </application>  
  28.   
  29. </manifest>  

 

注意:需要在AndroidManifest.xml文件中添加權限:

 <uses-permission android:name="android.permission.INTERNET" />

四、運行結果

\

  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved