图片的下载和保存

来源:互联网 发布:修改手机型号软件大全 编辑:程序博客网 时间:2024/06/02 18:42
package com.outdoors.jinghuang.demo;import android.app.Activity;import android.app.ProgressDialog;import android.graphics.Bitmap;import android.graphics.BitmapFactory;import android.os.AsyncTask;import android.os.Bundle;import android.os.Environment;import android.os.Handler;import android.os.Message;import android.util.Log;import android.view.View;import android.widget.Button;import android.widget.ImageView;import android.widget.ProgressBar;import android.widget.TextView;import android.widget.Toast;import org.w3c.dom.Text;import java.io.BufferedOutputStream;import java.io.ByteArrayOutputStream;import java.io.File;import java.io.FileNotFoundException;import java.io.FileOutputStream;import java.io.IOException;import java.io.InputStream;import java.net.HttpURLConnection;import java.net.MalformedURLException;import java.net.URL;/** * Created by jing.huang on 2016/12/13. */public class DownLoadAndSaveImage extends Activity implements View.OnClickListener {    private ImageView showImage;    private ProgressBar loadProgress;    private Button downLoadImageBt;    private Button saveImageBt;    private TextView showProgressTv;    //图片的下载地址    private final String PATH = "http://img.my.csdn.net/uploads/201402/24/1393242467_3999.jpg";    private String fileName = "save_image.jpg";//保存图片的名字    private String savePath;//保存路径    private Bitmap bitmap;    private static final int SAVE_SUCCESSFUL = 1001;    private static final int SAVE_UNSUCCESSFUL = 1002;    private ProgressDialog dialog;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.load_and_save_iamge);        showImage = (ImageView) findViewById(R.id.show_image);        loadProgress = (ProgressBar) findViewById(R.id.load_progress);        downLoadImageBt = (Button) findViewById(R.id.down_load_image);        saveImageBt = (Button) findViewById(R.id.save_iamge);        showProgressTv = (TextView) findViewById(R.id.show_progress_tv);        downLoadImageBt.setOnClickListener(this);        saveImageBt.setOnClickListener(this);        loadProgress.setVisibility(View.GONE);        showProgressTv.setVisibility(View.GONE);    }    @Override    public void onClick(View view) {        switch (view.getId()) {            case R.id.down_load_image://下载图片                loadProgress.setVisibility(View.VISIBLE);                showProgressTv.setVisibility(View.VISIBLE);                downLoadImage();                break;            case R.id.save_iamge://保存图片                saveImage();                break;            default:                break;        }    }    /**     * 保存图片     */    private void saveImage() {        if (!Environment.MEDIA_MOUNTED.equals(Environment.getExternalStorageState())) {            Toast.makeText(this, "The sdCard cannot be used!", Toast.LENGTH_SHORT).show();            return;        }        //显示dialog        dialog = new ProgressDialog(this);        dialog.setTitle("保存图片");        dialog.setMessage("图片正在保存,请稍后");        dialog.setIndeterminate(true);        dialog.show();        new Thread(new Runnable() {            @Override            public void run() {                savePath = Environment.getExternalStorageDirectory() + "/save_image/";                Log.d("DownLoadAndSaveImage", "path :" + Environment.getExternalStorageDirectory().getPath());                File file = new File(savePath);                if (!file.exists()) {                    file.mkdirs();                }                File fileImage = new File(savePath + fileName);                BufferedOutputStream bos = null;                Message msg = mhandler.obtainMessage();                try {                    bos = new BufferedOutputStream(new FileOutputStream(fileImage));                    bitmap.compress(Bitmap.CompressFormat.JPEG, 80, bos);//                    msg.what = SAVE_SUCCESSFUL;                    mhandler.sendEmptyMessageDelayed(SAVE_SUCCESSFUL, 2000);                } catch (FileNotFoundException e) {//                    msg.what = SAVE_UNSUCCESSFUL;                    mhandler.sendEmptyMessageDelayed(SAVE_UNSUCCESSFUL, 2000);                } finally {                    if (bos != null) {                        try {                            bos.close();                            bos = null;                        } catch (IOException e) {                            e.printStackTrace();                        }                    }                }            }        }).start();    }    private Handler mhandler = new Handler() {        @Override        public void handleMessage(Message msg) {            super.handleMessage(msg);            dialog.dismiss();            switch (msg.what) {                case SAVE_SUCCESSFUL:                    Toast.makeText(DownLoadAndSaveImage.this, "Image saved successful!", Toast.LENGTH_SHORT).show();                    break;                case SAVE_UNSUCCESSFUL:                    Toast.makeText(DownLoadAndSaveImage.this, "Image saved unsuccessful!", Toast.LENGTH_SHORT).show();                    break;                default:                    break;            }        }    };    /**     * 下载图片     */    private void downLoadImage() {        MyAsyncTask myAsyncTask = new MyAsyncTask();        myAsyncTask.execute(PATH);    }    private class MyAsyncTask extends AsyncTask<String, Integer, Bitmap> {        private int currentSize;        private int currentProgress;        @Override        protected void onPreExecute() {            super.onPreExecute();            loadProgress.setProgress(0);            loadProgress.setMax(100);        }        @Override        protected Bitmap doInBackground(String... strings) {            InputStream inputStream = null;            ByteArrayOutputStream baos = null;            try {                URL url = new URL(strings[0]);                HttpURLConnection connection = (HttpURLConnection) url.openConnection();                int total = connection.getContentLength();                inputStream = connection.getInputStream();                baos = new ByteArrayOutputStream();                byte[] byteData = new byte[8];                int len = 0;                while (true) {                    len = inputStream.read(byteData, 0, byteData.length);                    if (len < 0) {                        break;                    }                    currentSize += len;                    currentProgress = (int) (100 * currentSize / total);                    baos.write(byteData, 0, len);                    publishProgress(currentProgress);                }                byte[] bytes = baos.toByteArray();                bitmap = BitmapFactory.decodeByteArray(bytes, 0, bytes.length);            } catch (Exception e) {                e.printStackTrace();            } finally {                if (baos != null) {                    try {                        baos.close();                        baos = null;                    } catch (IOException e) {                        e.printStackTrace();                    }                }                if (inputStream != null) {                    try {                        inputStream.close();                        inputStream = null;                    } catch (IOException e) {                        e.printStackTrace();                    }                }            }            return bitmap;        }        @Override        protected void onProgressUpdate(Integer... values) {            super.onProgressUpdate(values);            loadProgress.setProgress(values[0]);            showProgressTv.setText("已下载:" + currentProgress + "%");        }        @Override        protected void onPostExecute(Bitmap bitmap) {            super.onPostExecute(bitmap);            loadProgress.setVisibility(View.GONE);            showProgressTv.setVisibility(View.GONE);            showImage.setImageBitmap(bitmap);        }    }}
0 0
原创粉丝点击