Android 异步加载图片-AsyncTask


AsyncTask定义了三种泛型类型 Params,Progress和Result。

?Params 启动任务执行的输入参数,比如HTTP请求的URL。

?Progress 后台任务执行的百分比。

?Result 后台执行任务最终返回的结果,比如String。

AsyncTask定义了三种泛型类型 Params,Progress和Result。

?Params 启动任务执行的输入参数,比如HTTP请求的URL。

?Progress 后台任务执行的百分比。

?Result 后台执行任务最终返回的结果,比如String。view plaincopy to clipboardprint?

一切说明都在代码中...................................................... 

Activity

  1. /* 
  2.  * Android 异步任务AsyncTask 
  3.  * AsyncTask定义了三种泛型类,Params,Progress,Result  
  4.  */  
  5. package rw.ansync;  
  6.   
  7. import android.app.Activity;  
  8. import android.os.Bundle;  
  9. import android.view.View;  
  10. import android.view.View.OnClickListener;  
  11. import android.widget.Button;  
  12. import android.widget.EditText;  
  13. import android.widget.ImageView;  
  14. import android.widget.ProgressBar;  
  15.   
  16. public class AsynaTask_TestActivity extends Activity {  
  17.     /** Called when the activity is first created. */  
  18.     private EditText editText;  
  19.     private Button button;  
  20.     private ProgressBar progressBar;  
  21.     private ImageView imageView;  
  22.     private static final String URL_STRING="http://photocdn.sohu.com/20110927/Img320705637.jpg";  
  23.     @Override  
  24.     public void onCreate(Bundle savedInstanceState) {  
  25.         super.onCreate(savedInstanceState);  
  26.         setContentView(R.layout.main);  
  27.          
  28.         editText=(EditText) findViewById(R.id.editText1);  
  29.         editText.setText(URL_STRING);  
  30.         button=(Button) findViewById(R.id.button1);  
  31.         progressBar=(ProgressBar) findViewById(R.id.progressBar1);  
  32.         imageView=(ImageView) findViewById(R.id.imageView1);  
  33.         button.setOnClickListener(new ButtonListener());  
  34.     }  
  35.     class ButtonListener implements OnClickListener{  
  36.   
  37.         @Override  
  38.         public void onClick(View v) {  
  39.             // TODO Auto-generated method stub   
  40.                 MyAsynaTask mTask=new MyAsynaTask(imageView, progressBar,button);  
  41.                 mTask.execute(URL_STRING);  
  42.         }  
  43.           
  44.     }  
  45.       
  46.      
  47. }  

MyAsynaTask.java

  1. package rw.ansync;  
  2.   
  3. import java.io.InputStream;  
  4. import java.net.HttpURLConnection;  
  5. import java.net.URL;  
  6.   
  7.   
  8.   
  9. import android.R.integer;  
  10. import android.graphics.Bitmap;  
  11. import android.graphics.BitmapFactory;  
  12. import android.os.AsyncTask;  
  13. import android.widget.Button;  
  14. import android.widget.ImageView;  
  15. import android.widget.ProgressBar;  
  16.   
  17.   
  18. public class MyAsynaTask extends AsyncTask<String, Integer, Bitmap>{  
  19.       
  20.     private ImageView imageView;  
  21.     private ProgressBar progressBar;  
  22.     private Button button;  
  23.       
  24.     public MyAsynaTask( ImageView imageView,  
  25.             ProgressBar progressBar,Button button) {  
  26.         super();  
  27.         this.imageView = imageView;  
  28.         this.progressBar = progressBar;  
  29.         this.button=button;  
  30.     }  
  31.   
  32.   
  33.     @Override  
  34.     protected void onPreExecute() {  
  35.         // TODO Auto-generated method stub   
  36.          
  37.         /* 
  38.          * 改方法在执行实际的后台操作时被UI线程调用,可以在该方法中做一些准备工作,比如 
  39.          *  Toast.makeText(context, "准备下载", Toast.LENGTH_LONG).show(); 
  40.          */  
  41.         super.onPreExecute();  
  42.     }  
  43.   
  44.     @Override  
  45.     protected Bitmap doInBackground(String... params) {//输入编变长的可变参数 和UI线程中的Asyna.execute()对应   
  46.         // TODO Auto-generated method stub   
  47.     /* 
  48.      * 该方法在OnpreExecute执行以后马上执行,改方法执行在后台线程当中,负责耗时的计算,可以调用publishProcess方法来实时更新任务进度 
  49.      */  
  50.         Bitmap bitmap=null;  
  51.         try {  
  52.              URL url=new URL(params[0]);  
  53.              HttpURLConnection connection=(HttpURLConnection) url.openConnection();  
  54.              connection.setDoInput(true);  
  55.              connection.connect();  
  56.              progressBar.setMax(connection.getContentLength());  
  57.               
  58.              InputStream inputStream=connection.getInputStream();  
  59.              bitmap=BitmapFactory.decodeStream(inputStream);  
  60.             // inputStream.close();   
  61.              /* 
  62.               * 以下完全为了演示进度条,如果为了显示进度条可以把这个去掉 
  63.               */  
  64.              /* 
  65.              byte []buf=new byte[1024*4]; 
  66.              inputStream=connection.getInputStream(); 
  67.              int len=0; 
  68.              while ((inputStream.read(buf))!=-1) { 
  69.                 len+=buf.length; 
  70.                 publishProgress(len); 
  71.             } 
  72.          */  
  73.               
  74.             inputStream.close();  
  75.               
  76.         } catch (Exception e) {  
  77.             // TODO: handle exception   
  78.         }  
  79.         return bitmap;  
  80.     }  
  81.   
  82.     @Override  
  83.     protected void onProgressUpdate(Integer... values) {  
  84.         // TODO Auto-generated method stub   
  85.         /* 
  86.          * 当publichProcess 呗调用以后,UI线程将调用这个有方法在界面上展示任务的情况,比如一个额进度条。这里是更新进度条 
  87.          */  
  88.         int value=values[0];  
  89.         progressBar.setProgress(value);  
  90.         super.onProgressUpdate(values);  
  91.     }  
  92.   
  93.       
  94.     @Override  
  95.     protected void onPostExecute(Bitmap result) {  
  96.         // TODO Auto-generated method stub   
  97.         /* 
  98.          * 在doInbackground执行完成以后,onPostExecute将被调用,后台的结果将返回给UI线程,将获得图片显示出来 
  99.          */  
  100.         imageView.setImageBitmap(result);  
  101.         button.setText("下载完成");  
  102.         super.onPostExecute(result);  
  103.     }  
  104.   
  105.   
  106. }  

加上权限<uses-permission android:name="android.permission.INTERNET"></uses-permission>  

相关内容