使用HttpURLConnecion下载图片

关于下载的问题我们首先要了解下载图片需要一些权限
1.关于连接网络的权限
我们在启动项添加
这样手机就可以连接到网络
2.之后关于安卓手机的不同的版本我们需要添加不同的权限
5.0以下的版本不需要考虑这个权限问题他们只要考虑网络问题
其他的我们需要添加

这个权限条件
首先我们要考虑文件是否存在 使用if语句判断一下 然后根据潘丹的条件我们在进行下一步的结果代码如下

public class DownLoadTask extends AsyncTask<String,Integer,Integer> {

    private  String dirpath;  //下载图片的目录  例如/root/pic/
    private  String filepath; //文件的存储位置   /root/pic/a.png
    private Context context;
    private ImageView  loadimg;



    public DownLoadTask(Context context,ImageView loadimg){
        this.context=context;

        this.loadimg=loadimg;
    }

    @Override
    protected Integer doInBackground(String... integers) {

        String fileName = integers[1];//要存储的名字


        //判断目录是否存在。若不在,创建目录

        dirpath = Environment.getExternalStorageDirectory()+"/"+"down_pics/";
 File dir = new File(dirpath);
 //判断目录是否存在。若不在,创建目录
        if (!dir.exists()){
            dir.mkdir();
        }
        filepath=dirpath+fileName;
        File file = new File(filepath);//创建文件对象
        if (file.exists()){
            return -1;
        }else
        {
            try {
                file.createNewFile();//不存在,就创建这个文件
            } catch (IOException e) {
                e.printStackTrace();
            }
        }

之后我们就要判断网络是否可以使用这里又有一个判断语句,后面我们要建立一个缓冲区以便节约资源,也非常方便下载
导入代码如下


        try {
            URL url = new URL(integers[0]);
            HttpURLConnection connection = (HttpURLConnection) url.openConnection();

            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.flush();
            outputStream.close();
            inputStream.close();
  } catch (MalformedURLException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
        return 1;
    }

之后我们就要更具前面的判断返回值来给以使用者信息这里还有一段代码展示
至于之后要把下载好的代码展示出来我们就要在根目录下将文件提取出来然后展现在屏幕上这时候
就是Bitmap发挥用武之地

 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;
        }
    }

之后再Activity中调用代码如下

 DownLoadTask task = new DownLoadTask(Main2Activity.this,imageView);
  task.execute(purl,"frqr.jpg");

以上就是将图片下载然后再屏幕上表现出来

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值