从URL将图像加载到视图中后,如何将图像保存到磁盘

时间:2019-04-05 14:35:24

标签: java android-glide

我正在构建一个需要从url获取图像的android应用,将其显示到图像视图后,我想将其存储在手机的硬盘中,以便以后可以使用而无需创建新的请愿书或取决于缓存。 我正在使用glide 4.9.0

一些在线解决方案包括使用一些不推荐使用的项目,例如SimpleTarget和Target,这些项目不适用于该项目。

这是我到目前为止所拥有的。

    File file = new File(holder.context.getExternalFilesDir(null), fileName);
        if (file.exists()) {
            GlideApp.with(holder.context).load(file).into(holder.ivProductImage);
        } else {
            GlideApp.with(holder.context).load(urlImage).into(holder.ivProductImage);
            // save the image to the hard drive
        }

1 个答案:

答案 0 :(得分:0)

//Step 1
Glide.with(mContext)
.load(images.get(position).getThumbnail())
.asBitmap()
.into(new Target<Bitmap>(100,100) {
    @Override
    public void onResourceReady(Bitmap resource, GlideAnimation glideAnimation) {
        saveImage(resource,position);
    }
});

//Step 2
private String saveImage(Bitmap image, int position) {
    String savedImagePath = null;

    String imageFileName = "JPEG_" + images.get(position).getName() + ".jpg";
    File storageDir = new File(
            Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES)
                    + "/Comicoid");
    boolean success = true;
    if (!storageDir.exists()) {
        success = storageDir.mkdirs();
    }
    if (success) {
        File imageFile = new File(storageDir, imageFileName);
        savedImagePath = imageFile.getAbsolutePath();
        try {
            OutputStream fOut = new FileOutputStream(imageFile);
            image.compress(Bitmap.CompressFormat.JPEG, 100, fOut);
            fOut.close();
        } catch (Exception e) {
            e.printStackTrace();
        }

        // Add the image to the system gallery
        galleryAddPic(savedImagePath);
    }
    return savedImagePath;
}

//Step 3
private void galleryAddPic(String imagePath) {
    Intent mediaScanIntent = new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE);
    File f = new File(imagePath);
    Uri contentUri = Uri.fromFile(f);
    mediaScanIntent.setData(contentUri);
    mContext.sendBroadcast(mediaScanIntent);
}