所以我正在使用改造将图像上传到我们的服务器,并使用图库选择器来选择图像。我试图获取图像的路径,因为uri.getPath()返回文件未找到异常。我几乎看到了关于这个主题的几乎所有stackoverflow文章,但仍然没有答案。我拥有的以下代码与我在网上看到的所有内容类似,它总是返回null,我不知道为什么。请帮助
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == PICK_IMAGE_REQUEST && resultCode == RESULT_OK && data != null && data.getData() != null) {
try {
android.net.Uri selectedImage = data.getData();
Bitmap bitmap = MediaStore.Images.Media.getBitmap(getContentResolver(), selectedImage);
// Log.d(TAG, String.valueOf(bitmap));
ImageView imageView = (ImageView) findViewById(R.id.expandedProfilePic);
imageView.setImageBitmap(bitmap);
String[] filePathColumn = {MediaStore.Images.Media.DATA};
android.database.Cursor cursor = getContentResolver().query(selectedImage, filePathColumn, null, null, null);
if (cursor == null)
return;
cursor.moveToFirst();
int columnIndex = cursor.getColumnIndex(filePathColumn[0]);
String filePath = cursor.getString(columnIndex);
cursor.close();
// is always null
System.out.println("FILE PATH " + filePath);
} catch (IOException e) {
e.printStackTrace();
}
}
}
答案 0 :(得分:3)
我正在尝试获取图像的路径,因为uri.getPath()返回文件未找到异常
假设“gallery chooser”是指ACTION_GET_CONTENT
或可能是ACTION_PICK
,则没有路径,因为Uri
不是文件。
我几乎看到了关于这个主题的每篇stackoverflow文章
不,你没有。具体来说,您尚未阅读我所贡献的任何数据,例如this one或this one或this one或this one或this one或{{ 3}}或this one或this one或this one或this one或this one或this one或this one。这些都是从2017年开始的。
以下代码与我在网上看到的所有内容相似
该代码不适用于大多数Uri
值。
使用ContentResolver
和openInputStream()
获取InputStream
标识的内容Uri
。理想情况下,您只需使用InputStream
。在Retrofit的情况下,虽然我还没有尝试使用它上传内容,但我的猜测是它坚持使用文件。在这种情况下,请在您控制的某个文件上使用InputStream
和FileOutputStream
来制作内容的副本。然后,上传副本,完成后将其删除。