Android课堂学习笔记——HttpUrlConnection(三)

使用HTTPUrlConnection下载网络图片并显示

1.判定文件夹是否存在并定义两个目录和文件对象
2.判断目录是否存在,若不存在,则创建目录
3.再判断文件是否存在,若不存在,则创建文件
4.对输入流与输出流进行设置
5.进行URL的初步设置
6.对返回码进行一个判定,判断是否连接成功
7.在onPostExecute()方法中,对传过来的值进行情况判定与输出

成果
这里写图片描述

代码展示

public class ImgActivity extends AppCompatActivity {

    private Button loadBtn;
    private ImageView loadImg;
    private String picUrl = "http://static.meiguoshenpo.com/image/201404/18105219640.jpg";


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

        bind();

        loadBtn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {

                ImgLoadTask task = new ImgLoadTask(ImgActivity.this,loadImg);
                task.execute(picUrl,"reba.jpg");

            }
        });

    }

    private void bind() {

        loadBtn = findViewById(R.id.loadpic_btn);
        loadImg = findViewById(R.id.loadpic_img);
    }
}
public class ImgLoadTask extends AsyncTask<String,Integer,Integer>{

    private String dirPath;//下载图片的目录
    private String filePath;//文件储存具体位置
    private Context context;
    private ImageView loadImg;

    public ImgLoadTask(Context context,ImageView image){

        this.context=context;
        this.loadImg=image;
    }

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

        //判断目录是否存在,诺不存在,
        dirPath = Environment.getExternalStorageDirectory()+"/download_pics/";

        File dir = new File(dirPath);//目录对象
        if (!dir.exists()){
            dir.mkdir();
        }

        //判断文件是否存在,若不存在,创建文件
        filePath = dirPath+strings[1];
        File file = new File(filePath);
        if (file.exists()){
            return -1;
        }else {
            try {
                file.createNewFile();//不存在,就创建出这个文件
            } catch (IOException e) {
                e.printStackTrace();
            }
        }

        InputStream inputStream = null;
        OutputStream outputStream = null;

        try {
            URL url = new URL(strings[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;
    }

    @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
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值