Android 基于ActivityResultLauncher实现联系人选择的Uri获取空指针问题咨询
ActivityResultLauncher重构联系人选择功能时的Uri获取异常问题
已验证可正常运行的环节
- 可通过构造的Intent成功拉起系统联系人选择页面
- 支持用户在选择页完成指定联系人的选取操作
累计4小时对照官方文档排查的尝试路径与阻碍
- 方案1:声明
ActivityResultLauncher入参为String、Uri类型,搭配ActivityResultContracts.GetContent()契约使用。由于联系人选择场景对应ContactsContract.PickContact流程,无匹配的固定MIME类型,无法传入有效启动参数,选择页拉起失败 - 方案2:使用自定义Intent直接拉起联系人选择页。完成联系人选取操作后,始终无法从回调结果中提取到可用的联系人Uri
- 文档校验:公开官方示例仅覆盖带明确MIME类型的通用内容选择场景(如本地图片选取),无联系人选择场景的对应实现指引
当前代码崩溃的完整触发链路
- 代码内定义成员变量
uriData,初始值固定为null - 结果回调逻辑中,直接将空值的
uriData设置为回调返回Intent的data值 - 后续调用
getContentResolver().query()方法时,直接把空的uriData作为查询参数传入,触发空指针异常 - 最终导致
InvoiceActivity从后台恢复显示时应用直接崩溃
核心逻辑缺陷:回调阶段未从实际返回的结果Intent中提取有效联系人Uri,反而将硬编码的空值传入后续查询流程
内容的提问来源于stack exchange,提问作者MartinInWyton
相关产品推荐
相关产品推荐

