Как сохранить изображение на диск после того, как загрузите его в представление из URL - PullRequest
0 голосов
/ 05 апреля 2019

Я создаю приложение для Android, которое должно извлечь изображение из URL-адреса и после того, как оно будет отображено в виде изображения, я хочу сохранить его на жестком диске телефона, чтобы его можно было использовать позже, не создавая новая петиция или в зависимости от кеша. Я использую 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 голосов
/ 05 апреля 2019
//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);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...