You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Kotlin中Uri?类型转Uri类型解决类型不匹配报错问题

问题根因

uploadfile函数要求传入非空的Uri类型参数,但你定义的全局变量myuri是可空的Uri?类型,Kotlin的空安全检测直接阻断了不做判空处理的传值操作,所以报类型不匹配错误。

解决方案(满足不修改uploadfile定义、保留myuri为可空全局变量的要求)

方案1:安全判空后调用(最推荐,不会出现空指针崩溃)

在点击事件里先判断myuri不为空再执行上传逻辑,空的情况下可以加兜底提示,代码示例:

Oncreate{
   button.setOnClickListner{
       myuri?.let { nonNullUri ->
           // 只有myuri不为空时才会执行这里的代码,nonNullUri就是非空的Uri类型
           uploadfile(filename, nonNullUri)
       } ?: run {
           // 这里写myuri为空时的兜底逻辑,比如弹出Toast提示用户先选择文件
           Toast.makeText(this, "请先选择要上传的文件", Toast.LENGTH_SHORT).show()
       }
   }
}

方案2:强制非空转换(仅适合100%确保点击按钮时myuri一定已经被赋值不为空的场景)

如果业务逻辑能保证用户点击按钮前,myuri已经被赋值不可能为空,可以用!!强制把可空类型转成非空类型:

Oncreate{
   button.setOnClickListner{
       uploadfile(filename, myuri!!)
   }
}

注意:如果实际运行时myuri为空,这个写法会直接抛出空指针异常导致App崩溃,没有特殊把握不要使用。

内容的提问来源于stack exchange,提问作者Ashutosh Singh

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.02 18:36:01