这种错误通常是由于从图库中获取的图片的路径与真实路径不匹配导致的。要解决这个问题,可以使用以下代码示例,使用FileProvider获取真实路径并保存图片到在线存储。
1.在AndroidManifest.xml文件中添加FileProvider配置:
2.在res/xml/目录下创建provider_paths.xml文件:
3.在代码中获取图库中选中图片的真实路径:
public String getRealPathFromURI(Uri contentUri) { String[] proj = { MediaStore.Images.Media.DATA }; CursorLoader loader = new CursorLoader(context, contentUri, proj, null, null, null); Cursor cursor = loader.loadInBackground(); int column_index = cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA); cursor.moveToFirst(); String result = cursor.getString(column_index); cursor.close(); return result; }
4.获取真实路径后,可以使用以下代码将图片保存到在线存储:
public void saveImageToOnlineStorage(Bitmap bitmap, String fileName) { try { ByteArrayOutputStream baos = new ByteArrayOutputStream(); bitmap.compress(Bitmap.CompressFormat.PNG, 100, baos); byte[] data = baos.toByteArray();
StorageReference storageRef = FirebaseStorage.getInstance().getReference();
StorageReference imagesRef = storageRef.child("images/" + fileName);
UploadTask uploadTask = imagesRef.putBytes(data);
Task