Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/eclipse/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Android KitKat图像选择不返回任何内容_Java_Android_Return_Android Image_Android 4.4 Kitkat - Fatal编程技术网

Java Android 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(.....

我一直在尝试获取KitKat上画廊中所选图像的绝对图像路径,但似乎没有成功。无论我做什么,我的变量
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;
}