图片的下载和保存

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 = "https://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
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值