I'm trying to create an application where i am required to add or delete an image simultaneously from image view and external storage. While doing the same, when I try adding the new image into the imageview using Uri, the old image keeps getting added again.

Here is my code

if (resultCode == Activity.RESULT_OK && requestCode == IMAGE_PICK_CODE_GALLERY) {
            var selectedImage = data?.data
            try {
 val bitmap = MediaStore.Images.Media.getBitmap(context?.contentResolver,selectedImage)
                if(bitmap!=null) {
                    val imageURI: String = getImageUri(context!!, bitmap)
                }


private fun getImageUri(context: Context, inImage: Bitmap): String {
        var fOut: OutputStream?
        var path: String? = null
        var fileName: String? = abc
        var file: File? = null

                file = File(
                    Environment.getExternalStorageDirectory().toString() + File.separator + "myDirectory",
                    "$fileName"
                )

            if (file.exists())
            {
                file.getCanonicalFile().delete()
                if (file.exists())
                {
                    context?.deleteFile(file.getName())
                }
                file.delete()
            }
            file.createNewFile() //If file already exists will do nothing
            fOut = FileOutputStream(file)
            inImage.compress(Bitmap.CompressFormat.JPEG, 40, fOut)
            Glide.with(this).load(file).into(imageView!!)
            fOut.flush()
            fOut.close()
           // path = MediaStore.Images.Media.insertImage(context.contentResolver,file.absolutePath,file.getName(),null);
        } catch (ex: Exception) {
            ex.printStackTrace()
        }
  return file.toString()
    }

1 Answers

1
hartwecm On Best Solutions

Glide caches your images, so probably you are loading a cached version of the old image.

As suggested in Glide's docs you should add a signature to handle cache invalidation:

Glide.with(yourFragment)
    .load(yourFileDataModel)
    .signature(new ObjectKey(yourVersionMetadata))
    .into(yourImageView);