android中AsyncTasks的实现

  1. package cn.caiwb.aysnc;   
  2.    
  3.    
  4. import org.apache.http.HttpResponse;   
  5. import org.apache.http.client.HttpClient;   
  6. import org.apache.http.client.methods.HttpGet;   
  7. import org.apache.http.impl.client.DefaultHttpClient;   
  8.    
  9. import android.app.Activity;   
  10. import android.graphics.Bitmap;   
  11. import android.graphics.BitmapFactory;   
  12. import android.os.AsyncTask;   
  13. import android.os.Bundle;   
  14. import android.view.View;   
  15. import android.view.View.OnClickListener;   
  16. import android.widget.Button;   
  17. import android.widget.ImageView;   
  18. import android.widget.ProgressBar;   
  19. import android.widget.Toast;   
  20.    
  21. public class AsyncTaskActivityextends Activity {   
  22.        
  23.     private ImageView mImageView;   
  24.     private Button mButton;   
  25.     private ProgressBar mProgressBar;   
  26.        
  27.     @Override   
  28.     public void onCreate(Bundle savedInstanceState) {   
  29.         super.onCreate(savedInstanceState);   
  30.         setContentView(R.layout.main);   
  31.            
  32.         mImageView= (ImageView) findViewById(R.id.imageView);   
  33.         mButton = (Button) findViewById(R.id.button);   
  34.         mProgressBar = (ProgressBar) findViewById(R.id.progressBar);   
  35.         mButton.setOnClickListener(new OnClickListener() {   
  36.                
  37.             @Override   
  38.             public void onClick(View v) {   
  39.                 GetIteyeLogoTask task = new GetIteyeLogoTask();   
  40.                 task.execute("http://www.iteye.com/images/logo.gif");   
  41.             }   
  42.         });   
  43.     }   
  44.        
  45.     class GetIteyeLogoTask extends AsyncTask<String,Integer,Bitmap> {//继承AsyncTask  
  46.    
  47.         @Override   
  48.         protected Bitmap doInBackground(String... params) {//处理后台执行的任务,在后台线程执行  
  49.             publishProgress(0);//将会调用onProgressUpdate(Integer... progress)方法  
  50.             HttpClient hc = new DefaultHttpClient();   
  51.             publishProgress(30);   
  52.             HttpGet hg = new HttpGet(params[0]);//获取csdn的logo  
  53.             final Bitmap bm;   
  54.             try {   
  55.                 HttpResponse hr = hc.execute(hg);   
  56.                 bm = BitmapFactory.decodeStream(hr.getEntity().getContent());   
  57.             } catch (Exception e) {   
  58.                    
  59.                 return null;   
  60.             }   
  61.             publishProgress(100);   
  62.             //mImageView.setImageBitmap(result); 不能在后台线程操作ui  
  63.             return bm;   
  64.         }   
  65.            
  66.         protected void onProgressUpdate(Integer... progress) {//在调用publishProgress之后被调用,在ui线程执行  
  67.             mProgressBar.setProgress(progress[0]);//更新进度条的进度  
  68.          }   

 

 

 

  1.    
  2.          protected void onPostExecute(Bitmap result) {//后台任务执行完之后被调用,在ui线程执行  
  3.              if(result != null) {   
  4.                  Toast.makeText(AsyncTaskActivity.this,"成功获取图片", Toast.LENGTH_LONG).show();   
  5.                  mImageView.setImageBitmap(result);   
  6.              }else {   
  7.                  Toast.makeText(AsyncTaskActivity.this,"获取图片失败", Toast.LENGTH_LONG).show();   
  8.              }   
  9.          }   
  10.             
  11.          protected void onPreExecute () {//在 doInBackground(Params...)之前被调用,在ui线程执行  
  12.              mImageView.setImageBitmap(null);   
  13.              mProgressBar.setProgress(0);//进度条复位  
  14.          }   
  15.             
  16.          protected void onCancelled () {//在ui线程执行  
  17.              mProgressBar.setProgress(0);//进度条复位  
  18.          }   
  19.            
  20.     }   
  21.        
  22.    
  23. }   

 

 

参数对应关系AsyncTask<String,Integer,Bitmap>

1:String 对应doInBackground(String... params)的类型

2:Integer对应onProgressUpdate(Integer... values)的类型

3:Bitmap对应doInBackground()返回类型,也即是onPostExecute(Bitmap result)的参数类型

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值