从URI获取文件路径时,Cursor返回null

时间:2017-06-07 12:10:11

标签: android uri gallery android-cursor android-contentresolver

Uri selectedImage = data.getData();
            String[] filePathColumn = { MediaStore.Images.Media.DATA };

            // Get the cursor
            Cursor cursor = getContentResolver().query(selectedImage,
                    filePathColumn, null, null, null);
            // Move to first row
            cursor.moveToFirst();

            int columnIndex = cursor.getColumnIndex(filePathColumn[0]);
            imgDecodableString = cursor.getString(columnIndex);
            cursor.close();

cursor.getString(columnIndex)返回Null 其中 selectedImage 不为空。

有关如何从URI创建文件的任何建议吗?

2 个答案:

答案 0 :(得分:0)

  

从URI

获取文件路径时,Cursor返回null

Uri不是文件。 Uri不必指向文件,更不用说文件系统上可以访问的文件。

  

有关如何从URI创建文件的任何建议吗?

使用ContentResolveropenInputStream()获取InputStream标识的内容Uri。理想情况下,直接使用InputStream。如果由于某种原因,您确实需要一个文件:

  • 在您控制的某个文件上创建FileOutputStream(例如,在getCacheDir()中)

  • 将字节从InputStream复制到FileOutputStream

  • 使用您刚刚创建的文件,完成后将其删除

答案 1 :(得分:-3)

使用此方法获取路径:

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();
}

在onACtivityResult中使用:

Uri selectedImage = data.getData();