Java Android KitKat图像选择不返回任何内容
我一直在尝试获取KitKat上画廊中所选图像的绝对图像路径,但似乎没有成功。无论我做什么,我的变量Java Android KitKat图像选择不返回任何内容,java,android,return,android-image,android-4.4-kitkat,Java,Android,Return,Android Image,Android 4.4 Kitkat,我一直在尝试获取KitKat上画廊中所选图像的绝对图像路径,但似乎没有成功。无论我做什么,我的变量IMAGE\u FILEPATH始终是“”。下面是我的onActivityResult()的代码 怎么了?我尝试了多种解决方案,但似乎没有任何效果。moveToFirst返回一个布尔值,指示移动到该位置是否会产生数据 boolean haveData; haveData = cursor.moveToFirst(); if (haveData) { cursor.getString(.....
IMAGE\u FILEPATH
始终是“”。下面是我的onActivityResult()的代码
怎么了?我尝试了多种解决方案,但似乎没有任何效果。moveToFirst返回一个布尔值,指示移动到该位置是否会产生数据
boolean haveData;
haveData = cursor.moveToFirst();
if (haveData) {
cursor.getString(.....
这就是你应该做的,这只是一个好的,防御性的编程。现在,为什么光标是空的,这将需要对contentResolver进行更多的挖掘 在KitKat中,库返回如下URI:content://com.android.providers.media.documents/document/image:1
而不是:
content://media/external/images/media/1
因此,以下是您可以在KK下编写的内容,以使其发挥作用:
if (uri != null) {
try {
if( uri == null ) {
IMAGE_FILEPATH = uri.getPath();
} else {
// get the id of the image selected by the user
String wholeID = DocumentsContract.getDocumentId(data.getData());
String id = wholeID.split(":")[1];
String[] projection = { MediaStore.Images.Media.DATA };
String whereClause = MediaStore.Images.Media._ID + "=?";
Cursor cursor = getContentResolver().query(getUri(), projection, whereClause, new String[]{id}, null);
if( cursor != null ){
int column_index = cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA);
if (cursor.moveToFirst()) {
IMAGE_FILEPATH = cursor.getString(column_index);
}
cursor.close();
} else {
IMAGE_FILEPATH = uri.getPath();
}
}
} catch (Exception e) {
Crouton.makeText(this, "Failed to get image", Style.ALERT).show();
}
}
我使用的函数是:
private Uri getUri() {
String state = Environment.getExternalStorageState();
if(!state.equalsIgnoreCase(Environment.MEDIA_MOUNTED)) {
return MediaStore.Images.Media.INTERNAL_CONTENT_URI;
}
return MediaStore.Images.Media.EXTERNAL_CONTENT_URI;
}
这些帖子帮助了我:而且
private Uri getUri() {
String state = Environment.getExternalStorageState();
if(!state.equalsIgnoreCase(Environment.MEDIA_MOUNTED)) {
return MediaStore.Images.Media.INTERNAL_CONTENT_URI;
}
return MediaStore.Images.Media.EXTERNAL_CONTENT_URI;
}