Android 异步加载图片-AsyncTask

来源:互联网 发布:红帽linux如何安装 编辑:程序博客网 时间:2024/05/17 22:48
AsyncTask定义了三种泛型类型 Params,Progress和Result。    •Params 启动任务执行的输入参数,比如HTTP请求的URL。    •Progress 后台任务执行的百分比。    •Result 后台执行任务最终返回的结果,比如String。
一切说明都在代码中......................................................


Activity

/* * Android 异步任务AsyncTask * AsyncTask定义了三种泛型类,Params,Progress,Result  */package rw.ansync;import android.app.Activity;import android.os.Bundle;import android.view.View;import android.view.View.OnClickListener;import android.widget.Button;import android.widget.EditText;import android.widget.ImageView;import android.widget.ProgressBar;public class AsynaTask_TestActivity extends Activity {    /** Called when the activity is first created. */private EditText editText;private Button button;private ProgressBar progressBar;private ImageView imageView;private static final String URL_STRING="http://photocdn.sohu.com/20110927/Img320705637.jpg";    @Override    public void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.main);               editText=(EditText) findViewById(R.id.editText1);        editText.setText(URL_STRING);        button=(Button) findViewById(R.id.button1);        progressBar=(ProgressBar) findViewById(R.id.progressBar1);        imageView=(ImageView) findViewById(R.id.imageView1);        button.setOnClickListener(new ButtonListener());    }    class ButtonListener implements OnClickListener{@Overridepublic void onClick(View v) {// TODO Auto-generated method stubMyAsynaTask mTask=new MyAsynaTask(imageView, progressBar,button);mTask.execute(URL_STRING);}        }       }


MyAsynaTask.java

package rw.ansync;import java.io.ByteArrayOutputStream;import java.io.File;import java.io.FileOutputStream;import java.io.InputStream;import java.io.OutputStream;import java.net.HttpURLConnection;import java.net.URL;import android.R.integer;import android.graphics.Bitmap;import android.graphics.BitmapFactory;import android.os.AsyncTask;import android.os.IInterface;import android.util.Log;import android.widget.Button;import android.widget.ImageView;import android.widget.ProgressBar;public class MyAsynaTask extends AsyncTask<String, Integer, Bitmap>{        private ImageView imageView;    private ProgressBar progressBar;    private Button button;        public MyAsynaTask( ImageView imageView,            ProgressBar progressBar,Button button) {        super();        this.imageView = imageView;        this.progressBar = progressBar;        this.button=button;    }    @Override    protected void onPreExecute() {        // TODO Auto-generated method stub               /*         * 改方法在执行实际的后台操作时被UI线程调用,可以在该方法中做一些准备工作,比如         *  Toast.makeText(context, "准备下载", Toast.LENGTH_LONG).show();         */        super.onPreExecute();    }    @Override    protected Bitmap doInBackground(String... params) {//输入编变长的可变参数 和UI线程中的Asyna.execute()对应        // TODO Auto-generated method stub    /*     * 该方法在OnpreExecute执行以后马上执行,改方法执行在后台线程当中,负责耗时的计算,可以调用publishProcess方法来实时更新任务进度     */        Bitmap bitmap=null;        try {             URL url=new URL(params[0]);             Log.i("------------->", url+"");             HttpURLConnection connection=(HttpURLConnection) url.openConnection();                          connection.connect();             int MAX=connection.getContentLength();             progressBar.setMax(MAX);                         InputStream inputStream=connection.getInputStream();                       ByteArrayOutputStream outputStream=new ByteArrayOutputStream();             /*              * 为了显示进度条,每接受1024字节要求更新一次UI,为了看效果              */             byte []buf=new byte[1024];             int len = 0;             int processBarNum=0;             while( (len=inputStream.read(buf))!=-1){                 outputStream.write(buf, 0, len);                 processBarNum+=len;                                  publishProgress(processBarNum);//通知要更新processBar             }             bitmap=BitmapFactory.decodeByteArray(outputStream.toByteArray(),0, MAX);             inputStream.close();                     } catch (Exception e) {            // TODO: handle exception        }        return bitmap;    }    @Override    protected void onProgressUpdate(Integer... values) {        // TODO Auto-generated method stub        /*         * 当publichProcess 呗调用以后,UI线程将调用这个有方法在界面上展示任务的情况,比如一个额进度条。这里是更新进度条         */        int value=values[0];        progressBar.setProgress(value);        super.onProgressUpdate(values);    }        @Override    protected void onPostExecute(Bitmap result) {        // TODO Auto-generated method stub        /*         * 在doInbackground执行完成以后,onPostExecute将被调用,后台的结果将返回给UI线程,将获得图片显示出来         */        imageView.setImageBitmap(result);        super.onPostExecute(result);    }}


 

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



 


原创粉丝点击