Android charge les images réseau et les télécharge localement

Android charge le diagramme de réseau et le télécharge

1. Je n'ai pas été occupé récemment et j'ai enfin le temps d'étudier et de réviser des points de connaissances. J'ai découvert que je n'étais pas familier avec le chargement d'images et le téléchargement d'images via le réseau, j'ai donc suivi un cours de recyclage. Eh bien, je le ferai parlez du code spécifique ci-dessous.

2. Ajoutez d'abord le code de mise en page :

<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. Ajoutez ensuite un événement click pour préparer l'exécution :

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

4. Finalement, c'est le code de la clé, donc j'ai juste tout copié, hahahaha :

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, mes frères, voici le code. Vous connaîtrez les détails en un coup d'œil. Cependant, je pense toujours qu'il n'est pas assez bon. Je l'optimiserai plus tard. Merci d'avoir regardé,

Guess you like

Origin blog.csdn.net/mawlAndroid/article/details/121560644
Recommended