王学岗自定义AsycTask

来源:互联网 发布:java支付平台开发demo 编辑:程序博客网 时间:2024/06/05 03:12

布局文件我就不写了,就是几个控件

package com.tz.kateasyctask_tz;import java.io.FileOutputStream;import java.io.IOException;import java.io.InputStream;import java.io.OutputStream;import java.net.HttpURLConnection;import java.net.MalformedURLException;import java.net.ProtocolException;import java.net.URL;import android.app.Activity;import android.graphics.Bitmap;import android.graphics.BitmapFactory;import android.os.AsyncTask;import android.os.Bundle;import android.os.Environment;import android.view.View;import android.view.View.OnClickListener;import android.widget.ImageView;import android.widget.ProgressBar;import android.widget.TextView;public class MainActivity extends Activity {    private ProgressBar pb;    private TextView progressText;    private ImageView iv_Image;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        pb = (ProgressBar) findViewById(R.id.pb);        progressText = (TextView) findViewById(R.id.tv);        iv_Image = (ImageView) findViewById(R.id.iv_image);        findViewById(R.id.button1).setOnClickListener(new OnClickListener() {            @Override            public void onClick(View v) {                start();            }        });    }    protected void start() {        //开始下载图片: url        String url = "http://e.hiphotos.baidu.com/image/pic/item/14ce36d3d539b600be63e95eed50352ac75cb7ae.jpg";        KateAsycTask task = new KateAsycTask();        task.execute(url,1+"");    }    /**     * Params   : 开启线程传入的参数 :url  请求参数     * Progress :异步任务执行的进度     * Result   :结果(异步任务执行后返回的结果)     * @author Administrator     *     */    class KateAsycTask extends AsyncTask<String, Integer, Bitmap>{        private InputStream inputStream;        private final String SD_CARD_PATH = Environment.getExternalStorageDirectory().getAbsolutePath().toString();        private int maxLength;        private FileOutputStream outputStream;        /**         * 运行在主线程:在异步任务执行之前调用()         * 主要做一些初始化         */        @Override        protected void onPreExecute() {            // TODO Auto-generated method stub            super.onPreExecute();        }        /**         * 在子线程中执行:执行下载任务         */        @Override        protected Bitmap doInBackground(String... params) {            Bitmap bitmap =null;            String imageUrl = params[0];//String s = params[1];            try {                //1,创建url                URL url = new URL(imageUrl);                //2,打开链接                HttpURLConnection conn = (HttpURLConnection) url.openConnection();                //3,设置请求方式                conn.setRequestMethod("GET");                //4,设置超时时间                conn.setConnectTimeout(5000);                if(conn.getResponseCode() == 200){                    maxLength = conn.getContentLength();                    //设置进度条的最大值                    pb.setMax(maxLength);                    inputStream = conn.getInputStream();                    //为主线程中的imageView设置图片----                    //bitmap = BitmapFactory.decodeStream(inputStream);                    String fileName = imageUrl.substring(imageUrl.lastIndexOf("/")+1);                    outputStream = new FileOutputStream(SD_CARD_PATH+"/"+ fileName);                    int len = 0;                    byte[] buffer = new byte[1024];                    while((len=inputStream.read(buffer))!=-1){                        outputStream.write(buffer, 0, len);                        //更新进度条---不能在这里更新:onProgressUpdate                        //onProgressUpdate(len);                        publishProgress(len);//触发调用onProgressUpdate                    }                    bitmap = BitmapFactory.decodeFile(SD_CARD_PATH+"/"+fileName);                }            } catch (Exception e) {                // TODO Auto-generated catch block                e.printStackTrace();            }finally{                try {                    if(outputStream!=null){                        outputStream.close();                    }                    if(inputStream!=null){                        inputStream.close();                    }                } catch (IOException e) {                    // TODO Auto-generated catch block                    e.printStackTrace();                }            }            return bitmap;        }        /**         * 在主线程中执行:接收异步任务下载的进度  更新UI线程的控件         */        @Override        protected void onProgressUpdate(Integer... values) {            pb.setProgress(pb.getProgress()+values[0]);            String text = "下载进度:"+100 * pb.getProgress() / maxLength+ "%" ;            progressText.setText(text);            super.onProgressUpdate(values);        }        /**         * 在主线程中执行:接收异步线程返回的结果         */        @Override        protected void onPostExecute(Bitmap result) {            super.onPostExecute(result);            iv_Image.setImageBitmap(result);        }        /**         * 取消异步任务(终止)         */        @Override        protected void onCancelled() {            // TODO Auto-generated method stub            super.onCancelled();        }    }}
1 0
原创粉丝点击