Android-okhttp下载图片并保存(刷新图库)

注意:下载和保存在子线程中进行。

//注意:下载和保存在子线程中进行。
        new Thread(new Runnable() {
            @Override
            public void run() {
                final Bitmap bitmap = getPic(url);//下载

                onSaveBitmap(bitmap, MainActivity.this);//保存到本地

                handler.post(new Runnable() {
                    @Override
                    public void run() {
                        iv4.setImageBitmap(bitmap);//显示图片
                    }
                });
            }
        }).start();

okhttp下载的方法:

 public Bitmap getPic(String url) {
        //获取okHttp对象get请求
        try {
            OkHttpClient client = new OkHttpClient();
            //获取请求对象
            Request request = new Request.Builder().url(url).build();
            //获取响应体
            ResponseBody body = client.newCall(request).execute().body();
            //获取流
            InputStream in = body.byteStream();
            //转化为bitmap
            Bitmap bitmap = BitmapFactory.decodeStream(in);

            return bitmap;
        } catch (IOException e) {
            e.printStackTrace();
        }
        return null;
    }

保存的方法:

 /*
    Android保存图片到系统图库:http://blog.csdn.net/xu_fu/article/details/39158747
    * */
    private void onSaveBitmap(final Bitmap mBitmap, final Context context) {
        // 第一步:首先保存图片
        //将Bitmap保存图片到指定的路径/sdcard/Boohee/下,文件名以当前系统时间命名,但是这种方法保存的图片没有加入到系统图库中
        File appDir = new File(Environment.getExternalStorageDirectory(), "Boohee");

        if (!appDir.exists()) {
            appDir.mkdir();
        }

        String fileName = System.currentTimeMillis() + ".jpg";
        File file = new File(appDir, fileName);

        try {
            FileOutputStream fos = new FileOutputStream(file);
            mBitmap.compress(Bitmap.CompressFormat.JPEG, 100, fos);
            fos.flush();
            fos.close();
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }

        // 第二步:其次把文件插入到系统图库
        try {
            MediaStore.Images.Media.insertImage(context.getContentResolver(), file.getAbsolutePath(), fileName, null);
//   /storage/emulated/0/Boohee/1493711988333.jpg
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        }

        // 第三步:最后通知图库更新
        context.sendBroadcast(new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE, Uri.parse("file://" + file)));
        //context.sendBroadcast(new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE, Uri.fromFile(file)));
    }

okhttp简单的封装(支持异步)后进行下载并显示图片:

工具类:

 class HttpUtil {
        private OkHttpClient client;

        public void getImage(String url, Callback callback) {
            //单例模式
            if (client == null) {
                client = new OkHttpClient();
            } else {
                Request request = new Request.Builder().url(url).build();
                //enqueue为OkHttp提供的异步方法
                client.newCall(request).enqueue(callback);
            }
        }
    }
 new HttpUtil().getImage(url, new Callback() {
            @Override
            public void onFailure(Request request, IOException e) {

            }

            @Override
            public void onResponse(com.squareup.okhttp.Response response) throws IOException {
                byte[] bytes = response.body().bytes();
                final Bitmap bitmap = BitmapFactory.decodeByteArray(bytes, 0, bytes.length);
//                InputStream inputStream = response.body().byteStream();
//                Bitmap bitmap1 = BitmapFactory.decodeStream(inputStream);
                handler.post(new Runnable() {//主线程更新UI
                    @Override
                    public void run() {
                        iv6.setImageBitmap(bitmap);
                    }
                });
            }
        });
  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值