Android学习(2)--图片下载

图片下载步骤

  1. 在DownloadTask文件中,首先要有下载图片路径
    private String dirPath;
  2. 第二要有文件名字
    private String filePath
  3. 在activity文件里面操作,ImgActivity传参将图片文件传参过来,传入参数
    loadBtn.setOnClickListener……
    {
    new DownloadTask().excute(picUrl,”frarri.jpg”);
    }
  4. 在doInBackground方法中传参,将要存储的图片名字传过来
    然后,判断目录是否存在,若不存在,创建目录
    创建目录对象
    判断是否存在,如果不存在,则创建

  5. 判断文件是否存在,若不存在,创建文件
    判断,如果存在,返回-1(文件已经创建) ,被onPostExcute接收
    如果不存在,则创建出这个文件

  6. 准备输入流输出流
  7. 文件填充内容
    URL
    HttpU
    判断是否能拿到输入流,返回码如果是200,则正常创建输入流
    如果不是,返回-2,中断操作,直接返回
  8. 开始输入,outPutStream
    定义一个int length=0;
    定义一个缓冲区
    开始往文件写入,直到……,开始输入下载
  9. 在onPostExcute文件中,判断integer

    如果是1,正常下载完成,创建一个构造方法DownloadTask
    Tost.makeText(context,)
    将imgview传过来,修改构造方法
    -1,文件已存在
    -2,网络异常

代码展示

DownloadActivity

public class DownloadActivity extends AppCompatActivity {
    private Button loadbtn;
    private ImageView loadimg;
    private String pirUrl="https://ss0.bdstatic.com/94oJfD_bAAcT8t7mm9GUKT-xh_/timg?image&quality=100&size=b4000_4000&sec=1520996808&di=573fdc8e3616f7c8eefceaa71a1236ab&src=http://p2.gexing.com/G1/M00/0C/D9/rBACE1Znl5yQ2i7HAAHBy-3TTyA645.png";

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_download);

        bindID();

        loadbtn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                DownloadTask task=new DownloadTask(DownloadActivity.this,loadimg);
                task.execute(pirUrl,"rqki.png");
            }
        });
    }

    private void bindID() {
        loadbtn=findViewById(R.id.load_btn);
        loadimg=findViewById(R.id.load_img);
    }
}

DownloadTask

public class DownloadTask extends AsyncTask<String,Integer,Integer>{
    private String dirPath;//下载图片的目录
    private String filePath;//下载文件存储位置
    private Context context;
    private ImageView loadImg;

    String TAG="fv";

    public DownloadTask(Context context,ImageView loadImg){
        this.context=context;
        this.loadImg=loadImg;
    }
    @Override
    protected Integer doInBackground(String... strings) {
        //判断目录是否存在,若不存在,创建目录
        dirPath= Environment.getExternalStorageDirectory()+"/"+"download_pics/";

        File dir=new File(dirPath);//目录对象
        if(!dir.exists()){
            dir.mkdir();
            Log.e(TAG, "doInBackground: exist" );
        }

        //判断文件是否存在,若不存在,创建文件
        filePath=dirPath+strings[1];//因为activity文件中传参数的位置是在第二个
        File file=new File(filePath);//创建文件对象
        if(file.exists()){
            Log.e(TAG, "doInBackground:files exist" );
            return -1;
        }else {
            try{
                Log.e(TAG, "doInBackground:no exist" );
                file.createNewFile();//若不存在,创建出这个文件
            } catch (IOException e) {
                e.printStackTrace();
            }
        }

        InputStream inputStream= null;
        FileOutputStream outputStream=null;

        try{
            URL url=new URL(strings[0]);
            Log.e(TAG, "doInBackground: exist1" );
            HttpURLConnection connection= (HttpURLConnection) url.openConnection();
            Log.e(TAG, "doInBackground: exist2" );
            if(connection.getResponseCode()==200){
                //判断返回码是否正常,若正常创建输入流,否则就直接返回
                inputStream=connection.getInputStream();
            }else {
                return -2;
            }
            outputStream=new FileOutputStream(file);

            int length=0;
            byte[] buffer=new byte[4*1024];//创建缓冲区
            while ((length=inputStream.read(buffer))!=-1){
                outputStream.write(buffer,0,length);
            }

            outputStream.close();
            inputStream.close();

        } catch (MalformedURLException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
        return 1;
    }

    @Override
    protected void onPostExecute(Integer integer) {
        super.onPostExecute(integer);
        switch (integer){
            case 1:
                //正常下载完成
                Toast.makeText(context,"下载完成",Toast.LENGTH_SHORT).show();
                Bitmap bm= BitmapFactory.decodeFile(filePath);
                loadImg.setImageBitmap(bm);
                break;
            case -1:
                Toast.makeText(context,"下载失败",Toast.LENGTH_SHORT).show();
                break;
            case -2:
                Toast.makeText(context,"网络异常",Toast.LENGTH_SHORT).show();
                break;
        }
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值