即使file.delete()返回true,也不会删除文件

时间:2015-10-22 16:55:56

标签: java android android-file

我有一个允许用户拍照的活动,onActivityResult()将在缓存目录中创建临时文件,以便在我将其上传到服务器之前存储它。

这就是我开始意图的方式:

Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
startActivityForResult(intent, REQUEST_CODE_CAMERA);

以下是 onActivityResult 中的代码:

@Override
    public void onActivityResult(int requestCode, int resultCode, Intent data){
      super.onActivityResult(requestCode, resultCode, data);
      if (resultCode == Activity.RESULT_OK) {

        if (requestCode == REQUEST_CODE_CAMERA) {
            try {
                Bitmap photo = (Bitmap) data.getExtras().get("data");

                File photoFile = new File(getActivity().getCacheDir(), "userprofilepic_temp.jpg");

                boolean b = false;
                if(photoFile.isFile()){
                    b = photoFile.delete();
                }
                b = photoFile.createNewFile(); //saves the file in the cache dir, TODO delete this file after account creation
                userPhotoFilePath = photoFile.getAbsolutePath();

                ByteArrayOutputStream bytes = new ByteArrayOutputStream();
                photo.compress(Bitmap.CompressFormat.JPEG, 90, bytes);

                FileOutputStream fos = new FileOutputStream(photoFile);
                fos.write(bytes.toByteArray());
                fos.close();

                displayUserPhoto(photoFile);

            } catch (IOException e) {
                e.printStackTrace();
            }


        }
        else if (requestCode == REQUEST_CODE_PHOTO_LIBRARY) {

        }

    }
}

displayUserPhoto只是一个简单的Glide调用:

@Override
public void displayUserPhoto(File photoFile) {
    Glide.with(this)
            .load(photoFile)
            .into(userPhotoView);
}

由于我想在用户决定重拍图片时覆盖上一张图片,我会检查photoFile是否为文件。如果是,我删除它。然后创建一个新文件。

问题是它总是返回相同的初始图片。即使我拨打.delete(),也永远不会删除该文件。

由于我正在使用应用程序的缓存目录,因此我不需要写权限,但只是因为我尝试了包含但仍然无效。

编辑:在

下添加完整流程

1 个答案:

答案 0 :(得分:1)

我真的不知道该怎么做,因为答案与我最初的想法完全不同,所以它并不真正与这个问题有关。

Glide不仅在内存中保存了缓存,还在磁盘上保存了缓存,因此为什么我不断获得相同的图像。

解决方案就是这样:

Glide.with(this)
            .load(photoFile)
            .skipMemoryCache(true)//this
            .diskCacheStrategy(DiskCacheStrategy.NONE)//and this
            .into(userPhotoView);