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
相关产品推荐
相关产品推荐

