Android Uri中的图像路径返回null
我试图从gallery中获取所选文件的路径,但它返回null,我不知道为什么。我看到的每一个代码都使用相同的方法,但它不适合我。这是我的密码:Android Uri中的图像路径返回null,android,Android,我试图从gallery中获取所选文件的路径,但它返回null,我不知道为什么。我看到的每一个代码都使用相同的方法,但它不适合我。这是我的密码: @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { // LOAD_FILE_REQUEST is a global variable: // private static final int LOAD_FIL
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
// LOAD_FILE_REQUEST is a global variable:
// private static final int LOAD_FILE_REQUEST = 1;
if (requestCode == LOAD_FILE_REQUEST && resultCode == RESULT_OK && data != null) {
if(data.getData() == null) {
System.out.println("NULL");
} else {
System.out.println("NOT NULL"); // <--- Printed
}
currImageURI = data.getData();
String[] filePathColumn = {MediaStore.Images.Media.DATA};
Cursor cursor = getContentResolver().query(currImageURI, filePathColumn, null, null, null);
if(cursor.moveToFirst()){
int columnIndex = cursor.getColumnIndex(filePathColumn[0]);
String yourRealPath = cursor.getString(columnIndex);
System.out.println("REAL PATH "+yourRealPath);
} else {
System.out.println("NO ROWS!!!"); // <-- Not printed
}
cursor.close();
}
}
您是否在清单中添加了以下行?=]
您是否在清单中添加了以下行?=]
好吧,下面是我如何在我的生活壁纸诺伊劳德,看看:p
@Override
protected void onActivityResult(int requestCode, int resultCode,
Intent imageReturnedIntent) {
super.onActivityResult(requestCode, resultCode, imageReturnedIntent);
switch (requestCode) {
case 100:
if (resultCode == RESULT_OK) {
Uri selectedImage = imageReturnedIntent.getData();
@SuppressWarnings("unused")
InputStream imageStream = null;
try {
imageStream = getContentResolver().openInputStream(
selectedImage);
} catch (FileNotFoundException e) {
e.printStackTrace();
}
sharedPreferences = getSharedPreferences("NLP_settings", 0);
Editor editor = sharedPreferences.edit();
editor.putString("key_bit", getPath(selectedImage));
editor.commit();
restartThis();
}
}
}
public String getPath(Uri uri) {
// just some safety built in
if (uri == null) {
return null;
}
// try to retrieve the image from the media store first
// this will only work for images selected from gallery
String[] projection = { MediaStore.Images.Media.DATA };
Cursor cursor = managedQuery(uri, projection, null, null, null);
if (cursor != null) {
int column_index = cursor
.getColumnIndexOrThrow(MediaStore.Images.Media.DATA);
cursor.moveToFirst();
return cursor.getString(column_index);
}
// this is our fallback here
return uri.getPath();
}
好吧,下面是我如何在我的生活壁纸诺伊劳德,看看:p
@Override
protected void onActivityResult(int requestCode, int resultCode,
Intent imageReturnedIntent) {
super.onActivityResult(requestCode, resultCode, imageReturnedIntent);
switch (requestCode) {
case 100:
if (resultCode == RESULT_OK) {
Uri selectedImage = imageReturnedIntent.getData();
@SuppressWarnings("unused")
InputStream imageStream = null;
try {
imageStream = getContentResolver().openInputStream(
selectedImage);
} catch (FileNotFoundException e) {
e.printStackTrace();
}
sharedPreferences = getSharedPreferences("NLP_settings", 0);
Editor editor = sharedPreferences.edit();
editor.putString("key_bit", getPath(selectedImage));
editor.commit();
restartThis();
}
}
}
public String getPath(Uri uri) {
// just some safety built in
if (uri == null) {
return null;
}
// try to retrieve the image from the media store first
// this will only work for images selected from gallery
String[] projection = { MediaStore.Images.Media.DATA };
Cursor cursor = managedQuery(uri, projection, null, null, null);
if (cursor != null) {
int column_index = cursor
.getColumnIndexOrThrow(MediaStore.Images.Media.DATA);
cursor.moveToFirst();
return cursor.getString(column_index);
}
// this is our fallback here
return uri.getPath();
}
你能再解释一下你的问题是什么吗?你从哪里得到空值 您在哪个Android版本中运行此代码?从Android 4.4开始,当您发送图像拾取意向时打开的文件选择器将返回一个相对uri,因为它不仅显示存储在设备中的文件,还显示存储在云中的文件。因此,您可能会得到一个相对URI,当您查询它在设备上的位置时,您会得到null,因为ContentResolver没有该文件的路径 如果事实上是这样,即使你不是,因为你应该开发与Android新版本兼容的应用程序,我建议你使用Content Resvolver打开InputStream来获取文件openInputStreamUri,因为它允许你从本地和云上的任何位置获取文件
我希望有帮助:你能再解释一下你的问题是什么吗?你从哪里得到空值 您在哪个Android版本中运行此代码?从Android 4.4开始,当您发送图像拾取意向时打开的文件选择器将返回一个相对uri,因为它不仅显示存储在设备中的文件,还显示存储在云中的文件。因此,您可能会得到一个相对URI,当您查询它在设备上的位置时,您会得到null,因为ContentResolver没有该文件的路径 如果事实上是这样,即使你不是,因为你应该开发与Android新版本兼容的应用程序,我建议你使用Content Resvolver打开InputStream来获取文件openInputStreamUri,因为它允许你从本地和云上的任何位置获取文件
我希望它能有所帮助:这是一个相对URI,当您查询它的位置时。。。ContentResolver没有该文件的路径。帮助我用另一种方法来解决我的问题。我没有试图获取图像位置,而是将其保存在sd上,然后通过这个新文件路径访问它。谢谢。是的,问题在于图像选择器的意图。这是一个相对URI,当你查询它的位置时。。。ContentResolver没有该文件的路径。帮助我用另一种方法来解决我的问题。我没有试图获取图像位置,而是将其保存在sd上,然后通过这个新文件路径访问它。谢谢。是的,问题出在图像选择器的意图上。