android 取相册 图片 getContentResolver().query 返回空。

在Android开发中,从系统相册选取图片时,不同版本的Android可能会遇到getContentResolver().query返回空的状况,导致应用闪退。通过在onActivityResult中对Cursor进行非空判断可以解决这一问题,确保应用在各版本Android上的兼容性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

android开发一步一坑,要想适配这种机型覆盖各种版本真是要花点功夫。
今天来说说从系统相册取照片这么一个简单的事情。
一般情况下我们只需要调用系统相册然后在onActivityResult里面接收图片地址剩下的就自己处理就行了。
代码:

private void getPhoto(){
// 相册挑选一张
                    Intent photoPickerIntent = new Intent(Intent.ACTION_PICK);
                    photoPickerIntent.setType("image/*");
                    startActivityForResult(photoPickerIntent, PICTURE_CHOOSE);
}

protected void onActivityResult(int requestCode, int resultCode, Intent data) {
...
     Cursor cursor = getContentResolver().query(data.getData(),
                            null, null, null, null);
    cursor.moveToFirst();
    int idx = cursor.getColumnIndex(MediaStore.Images.ImageColumns.DATA);
    String fileSrc = cursor.getString(idx);
    cursor.close();
    //接到图片地址以后他就是你的了,想干什么就干什么吧。
}

然后你就可以愉快的和图片玩耍了。不过当你玩的很heigh的时候突然测试同学就过来找到了你。嗨,猿猿,我发现这款手机选图片以后就会闪退啊。
黑人问号脸.jpg
你当时是一脸懵逼。
问题就来了。不同的安卓版本下取图片地址的方式发生了变化。在这里我们要对Cursor 做一个是否为空的判断。

if(cursor!=null) {
                        cursor.moveToFirst();
                        int idx = cursor.getColumnIndex(MediaStore.Images.ImageColumns.DATA);
                        fileSrc = cursor.getString(idx);
                        cursor.close();
                    }
                    else
                    {
                        fileSrc=data.getData().getPath();
                    }

就像这样就行了。
好了愉快的玩耍吧。

艾克峰网络科技

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值