Android 从库中读取位图并将其写入sd卡失败

Android 从库中读取位图并将其写入sd卡失败,android,bitmap,android-sdcard,android-gallery,android-external-storage,Android,Bitmap,Android Sdcard,Android Gallery,Android External Storage,我想将位图从图库复制到sd卡上的路径 此功能适用于从相机拍摄的照片: public void saveBitmap(Bitmap bitMap, Uri avatarUri) throws Exception{ File file = new File(avatarUri.toString()); // if (file.exists ()) file.delete (); try { OutputStream fOut =

我想将位图从图库复制到sd卡上的路径

此功能适用于从相机拍摄的照片:

public void saveBitmap(Bitmap bitMap, Uri avatarUri) throws Exception{
        File file = new File(avatarUri.toString());
//        if (file.exists ()) file.delete ();
        try {
            OutputStream fOut = new FileOutputStream(file);
            if (bitMap.compress(Bitmap.CompressFormat.PNG, 100, fOut)) {
                fOut.flush();
                fOut.close();
            } else {
                Log.d("123", "compress file");
            }
        } catch (Exception e) {
            Log.d("123", "File not found file");
        }
}
但当我使用以下选项从库中选择图像时:

void getImageFromGallery(Intent data) throws FileNotFoundException {
        Uri selectedImage = data.getData();
        String[] filePathColumn = { MediaStore.Images.Media.DATA };
        Cursor cursor = context.getContentResolver().query(selectedImage,
                filePathColumn, null, null, null);
        cursor.moveToFirst();
        int columnIndex = cursor.getColumnIndex(filePathColumn[0]);
        String picturePath = cursor.getString(columnIndex);
        cursor.close();
        Bitmap bitmap = BitmapFactory.decodeFile(picturePath);
        avatarBitmap = bitmap;
    }
并使用
saveBitmap()
方法保存此所选图像,它会捕获一个
文件未找到
异常。
此方法生成文件夹并返回
saveBitmap()
方法的URI

 public Uri generateAvatarImageUri(String patientName) {
        Date date = new Date(0);
        SimpleDateFormat sdf = new SimpleDateFormat ("yyyyMMddHHmmss");
        String filename =  sdf.format(date) + patientName;
        return Uri.fromFile(new File(getExternalStorageDirectory(), avatarFolderPath+filename+".jpg"));
    }
}

有什么帮助吗?

最后我找到了原因,因为文件路径问题

这就是我使用的:

Uri uri = ....;
path = uri.toString();
这导致前缀文件://被添加到路径字符串中,如下所示:

file:///storage/...png
希望能帮助一些人