安卓 加载网络图片并下载本地

安卓 加载网络图并下载

1,最近暂时不忙,终于有时间学习复习知识点了, 发现自己对于网络加载图并且下载不熟悉,于是乎补习了一下,嗯 下面我就说具体代码吧。

2,首先添加布局代码:

<ImageView
    android:layout_width="match_parent"
    android:layout_height="250dp"
    android:layout_margin="15dp"
    android:id="@+id/iv_pic"
    android:src="@mipmap/ic_launcher"></ImageView>

<Button
    android:id="@+id/bt_download"
    android:layout_width="wrap_content"
    android:layout_gravity="center_horizontal"
    android:layout_height="wrap_content"
    android:text="下载图片" />

3,然后呢 添加 点击事件准备执行:

//加载网络图片 并且存储本地
btn_download.setOnClickListener(new View.OnClickListener() {
    
    
    @Override
    public void onClick(View view) {
    
    
        MyAsyncTask myAsyncTask=new MyAsyncTask(iv_pic,progressDialog);
        myAsyncTask.execute(path);
    }
});

4,最后呢,是关键的代码,我就直接全部复制了,哈哈哈哈:

package com.example.myviewtwo.study.threen;

import android.app.ProgressDialog;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.os.AsyncTask;
import android.os.Environment;
import android.util.Log;
import android.widget.ImageView;

import java.io.BufferedInputStream;
import java.io.File;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.net.URLConnection;
import java.util.Random;

public class MyAsyncTask extends AsyncTask<String, Integer, Bitmap> {
    
    

    private ImageView iv_pic;
    private ProgressDialog progressBarDialog;

    boolean isDownload=false;

    private int progress333;
    private int downloadCount;

    private String mSavePath;


    public MyAsyncTask(ImageView imageView, ProgressDialog p) {
    
    
        iv_pic = imageView;
        progressBarDialog = p;
    }

    @Override
    protected void onPreExecute() {
    
    
        super.onPreExecute();
        Log.d("info", "准备执行");
        progressBarDialog.setTitle("当前任务");
        progressBarDialog.setMessage("正在下载图片,请稍后...");
        progressBarDialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);//设置进度条样式,横项
        progressBarDialog.show();
    }

    @Override
    protected Bitmap doInBackground(String... params) {
    
    
        Log.d("info", "开始执行");
        String path=params[0];
        Log.d("info","提交的访问图片地址是==="+path);

        // 获得存储卡的路径
        String sdpath = Environment.getExternalStorageDirectory() + "/";
        mSavePath = sdpath + "download";
        File file = new File(mSavePath);
        // 判断文件目录是否存在
        if (!file.exists()) {
    
    
            file.mkdir();
        }

        Bitmap bitmap=getBitmap(path);

        return bitmap;
    }


    public Bitmap getBitmap(String url) {
    
    
        Bitmap bm = null;
        try {
    
    
            URL iconUrl = new URL(url);
            URLConnection conn = iconUrl.openConnection();
            HttpURLConnection http = (HttpURLConnection) conn;
            int length = http.getContentLength();

            conn.connect();
            // 获得图像的字符流
            InputStream is = conn.getInputStream();

            //获取图片 并且显示
            BufferedInputStream bis = new BufferedInputStream(is, length);
            bm = BitmapFactory.decodeStream(bis);

            bis.close();
            is.close();// 关闭流
        }
        catch (Exception e) {
    
    
            e.printStackTrace();
        }
        return bm;
    }


    @Override
    protected void onProgressUpdate(Integer... values) {
    
    
        super.onProgressUpdate(values);
        Log.d("info", "显示进度");
        progressBarDialog.setProgress(values[0]);
    }

    @Override
    protected void onPostExecute(Bitmap bitmap) {
    
    
        super.onPostExecute(bitmap);
        Log.d("info", "执行返回结果");
        progressBarDialog.dismiss();

        iv_pic.setImageBitmap(bitmap);

        //保存到本地
        SavaImage(bitmap);


    }




    /**
     * 保存位图到本地
     * @param bitmap
     * @return void
     */
    public void SavaImage(Bitmap bitmap){
    
    

        File file=new File(mSavePath);
        FileOutputStream fileOutputStream=null;
        //文件夹不存在,则创建它
        if(!file.exists()){
    
    
            file.mkdir();
        }
        try {
    
    

//            判断SD卡是否存在,并且是否具有读写权限
            if (Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)) {
    
    
                fileOutputStream=new FileOutputStream(mSavePath+"/"+System.currentTimeMillis()+".jpg");
                bitmap.compress(Bitmap.CompressFormat.JPEG, 100,fileOutputStream);
                fileOutputStream.close();
                Log.d("info","图片下载完成了");
            }else{
    
    
                Log.d("info","没有文件写入权限");
            }

        } catch (Exception e) {
    
    
            e.printStackTrace();
        }

    }

}

OK ,兄弟们,这就是代码了,具体的你们一看便知道,不过我还是觉得不够好,后期自己再优化吧。感谢收看 ,

猜你喜欢

转载自blog.csdn.net/mawlAndroid/article/details/121560644