Android 如何删除使用Uri创建的文件?

Android 如何删除使用Uri创建的文件?,android,Android,我的应用程序从相机拍摄照片并将其保存在一个文件中,该文件的Uri存储在SQL数据库中。使用数据库中的Uri初始化位图工作正常。但是,当我尝试使用数据库中的Uri初始化文件,然后使用imagefile.delete()删除时,它不起作用。我尝试过其他帖子中给出的几种方法,但都不管用 这就是我如何保存文件 照相机的用途: Intent startCamera = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); if (

我的应用程序从相机拍摄照片并将其保存在一个文件中,该文件的Uri存储在SQL数据库中。使用数据库中的Uri初始化位图工作正常。但是,当我尝试使用数据库中的Uri初始化文件,然后使用
imagefile.delete()
删除时,它不起作用。我尝试过其他帖子中给出的几种方法,但都不管用

这就是我如何保存文件

照相机的用途:

Intent startCamera = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
                    if (startCamera.resolveActivity(getPackageManager())!=null)
                    {
                        photoFile= null;
                        try{
                            photoFile = createImageFile();
                        }
                        catch (IOException ex)
                        {
                            Log.e("File Creation","error");
                        }
                        if (photoFile!=null)
                        {
                            photoURI = FileProvider.getUriForFile(context,"lcukerd.com.android.fileprovider",photoFile);
                            startCamera.putExtra(MediaStore.EXTRA_OUTPUT,photoURI);
                            camerastarted=true;
                            startActivityForResult(startCamera,CAMERA_REQUEST);
                        }
                    }
声明的方法:

private File createImageFile() throws IOException
{
    String EName = "Stuff";
    File storageDir = getExternalFilesDir(Environment.DIRECTORY_PICTURES);
    File image = File.createTempFile(EName,".jpg",storageDir);
    return image;
}
压缩图像:

photoFile.delete();
FileOutputStream out = null;
                    try {
                        File image = createImageFile();
                        photoURI = FileProvider.getUriForFile(context, "lcukerd.com.android.fileprovider", image);
                        out = new FileOutputStream(image);
                        photo.compress(Bitmap.CompressFormat.PNG, 100, out);
                    } catch (Exception e) {
                        e.printStackTrace();
                    } finally {
                        try {
                            if (out != null) {
                                out.close();
                            }
                        } catch (IOException e) {
                            e.printStackTrace();
                        }
                    }
将Uri保存到数据库是将Uri简单地转换为字符串,然后保存到表的文本列中

帮我删除图像文件

编辑:

我试着跟着

private void deleteimage(String imageloc)
    {
        File imagefile = new File(getRealPathFromURI(Uri.parse(imageloc)));
        Log.d("file deletion",String.valueOf(imagefile.delete())+" "+imageloc);
    }
    public String getRealPathFromURI( Uri contentUri) {
        String result;
        Cursor cursor = getContentResolver().query(contentUri, null, null, null, null);
        if (cursor == null) { // Source is Dropbox or other similar local file path
            result = contentUri.getPath();
        } else {
            cursor.moveToFirst();
            int idx = cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA);
            result = cursor.getString(idx);
            cursor.close();
        }
        return result;
    }


无任何操作。

由于这是从
文件提供程序
获得的
Uri
,请在
内容解析程序
上调用
delete()
,传入
Uri
(对于其余参数,加上
null
)。这将删除基础文件,至少根据


或者,在数据库中存储文件路径,而不是
Uri
,因为这是您的文件。您可以稍后根据需要使用
FileProvider.getUriForFile()
重新创建
Uri
,并且您可以使用
File
上的
delete()
来删除给定路径的文件。

由于这是从
FileProvider
获得的
Uri
,请调用
delete()
ContentResolver
上,传入
Uri
(加上
null
,用于其余参数)。这将删除基础文件,至少根据


或者,在数据库中存储文件路径,而不是
Uri
,因为这是您的文件。您可以在以后根据需要使用
FileProvider.getUriForFile()
重新创建
Uri
,并且您可以使用
File
上的
delete()
来删除给定路径的文件。

使用imagefile.delete()删除它不起作用。
没有告诉我们太多。请检查edit@RotwangYes,但您为什么得到它?运行时错误?权限?文件就放在那里?或者它只是因为忘记从db表中删除条目而仍然列在数据库中?imagefile.delete();返回false。没有显示其他内容。文件仍然存在@Rotwang
使用imagefile删除。delete()无效。
没有告诉我们太多。请检查edit@RotwangYes,但为什么会得到?运行时错误?权限?文件就放在那里?或者它只是因为忘记从db表中删除条目而仍然列在数据库中?imagefile.delete();返回false。没有显示其他内容。文件仍然在那里@RotwangI不明白。我应该用什么初始化FileProvider变量?这不管用。FileProvider imagefile=新的FileProvider();delete(Uri.parse(imageloc),null,null)@lcukerd:我回答的第一段说在
ContentResolver
上调用
delete()
。通过对某些
上下文(例如
活动
)调用
getContentResolver()
,您将获得一个
ContentResolver
。再次感谢,它成功了。我几乎忘记了ContentResolver,尽管我在另一个活动中使用了它:(我不明白。我应该用什么初始化FileProvider变量?这不起作用。FileProvider imagefile=new FileProvider();imagefile.delete(Uri.parse(imageloc),null,null);@lcukerd:我回答的第一段说调用
delete()
内容解析程序上
。通过在某些
上下文
(例如,
活动
)上调用
getContentResolver()
,您会得到一个
内容解析程序。再次感谢,它起作用了。我几乎忘记了ContentResolver,尽管我在另一个活动中使用了它:(
private void deleteimage(String imageloc)
    {
        File imagefile = new File(Uri.parse(imageloc).getpath());
        Log.d("file deletion",String.valueOf(imagefile.delete())+" "+imageloc);
    }