以下代码中选择图片后,用File imageFile = new File(selectedImagePath);提示图片不存在;其中通过Uri获取图片文件的写法有没有问题; @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); //在这个代码中,我们通过setImageBitmap()方法将Bitmap对象直接设置到ImageView中,而不是使用Glide库加载图片。对于拍摄的照片,我们直接使用photo作为Bitmap对象; // 对于从相册选择的照片,我们使用MediaStore来获取Bitmap对象。 if (resultCode == Activity.RESULT_OK) { if (requestCode == REQUEST_IMAGE_CAPTURE) { Bitmap photo = (Bitmap) data.getExtras().get("data"); Uri tempUri = getImageUri(photo); selectedImagePath = tempUri.getPath(); imageView.setImageBitmap(photo); } else if (requestCode == REQUEST_IMAGE_PICK) { Uri selectedImageUri = data.getData(); selectedImagePath = selectedImageUri.getPath(); try { Bitmap bitmap = MediaStore.Images.Media.getBitmap(this.getContentResolver(), selectedImageUri); imageView.setImageBitmap(bitmap); } catch (IOException e) { e.printStackTrace(); } } Log.e("2222",selectedImagePath.toString() ); } }
时间: 2024-04-09 14:27:43 浏览: 120
根据您提供的代码,问题可能出现在获取图片文件路径的部分。在Android中,通过`Uri`获取文件路径有时会遇到问题,因为`Uri`可能具有不同的方案(scheme),如`content://`或`file://`。为了确保能够正确获取文件路径,可以使用以下方法:
```java
if (requestCode == REQUEST_IMAGE_CAPTURE) {
Bitmap photo = (Bitmap) data.getExtras().get("data");
Uri tempUri = getImageUri(photo);
selectedImagePath = getRealPathFromUri(tempUri);
imageView.setImageBitmap(photo);
} else if (requestCode == REQUEST_IMAGE_PICK) {
Uri selectedImageUri = data.getData();
selectedImagePath = getRealPathFromUri(selectedImageUri);
try {
Bitmap bitmap = MediaStore.Images.Media.getBitmap(this.getContentResolver(), selectedImageUri);
imageView.setImageBitmap(bitmap);
} catch (IOException e) {
e.printStackTrace();
}
}
```
然后,您可以实现一个名为`getRealPathFromUri(Uri uri)`的方法来获取真实的文件路径。以下是一个示例实现:
```java
private String getRealPathFromUri(Uri uri) {
String[] projection = { MediaStore.Images.Media.DATA };
Cursor cursor = getContentResolver().query(uri, projection, null, null, null);
int columnIndex = cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA);
cursor.moveToFirst();
String filePath = cursor.getString(columnIndex);
cursor.close();
return filePath;
}
```
该方法使用了查询操作来获取真实的文件路径。请注意,需要处理异常情况和对返回值进行适当的验证。希望这可以解决您遇到的问题。
阅读全文