Android getContentResolver().query 获取文件路径NullPointerException

针对Android 6.0系统测试如下:

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);

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

    Cursor cursor = getContentResolver().query(fileUri, filePathColumn, null, null, null);
    cursor.moveToFirst();
    String filePath = cursor.getString(cursor.getColumnIndex(filePathColumn[0]));
    cursor.close();
}

cursor的结果为null,查找原因,得到如下结论:

对于Android 6.0及后续版本,Uri的形式发生变化,此时如果要获取图像的路径,可以按照如下实现:

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);

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

    String filePath = null;
    if(Build.VERSION.SDK_INT < Build.VERSION_CODES.M) {
        Cursor cursor = getContentResolver().query(fileUri, filePathColumn, null, null, null);
        cursor.moveToFirst();
        filePath = cursor.getString(cursor.getColumnIndex(filePathColumn[0]));
        cursor.close();
    } else {
        filePath = fileUri.getPath();
    }
}
上一篇 Android自定义广播设置只能由指定的APP接收
下一篇 Android判断应用通知权限是否开启以及跳转到设置界面
目录
文章列表
1 关于Redisson锁的使用和理解
关于Redisson锁的使用和理解
2
Groovy代码示例 - list
Groovy代码示例 - list
3
Atlas Demo解析
Atlas Demo解析
4
Android自定义广播设置只能由指定的APP接收
Android自定义广播设置只能由指定的APP接收
5
您的设备与此版本不兼容 Your device isn't compatible with this version 部分设备无法从Google Play下载应用
您的设备与此版本不兼容 Your device isn't compatible with this version 部分设备无法从Google Play下载应用
最新评论
一位WordPress评论者
一位WordPress评论者
2月12日
您好,这是一条评论。若需要审核、编辑或删除评论,请访问仪表盘的评论界面。评论者头像来自 Gravatar。