Kotlin类型不匹配求助:PeerConnection?与PeerConnection类型冲突
解决WebRTC 1.0.22920版本Kotlin中PeerConnection类型不匹配问题
嘿,刚学Kotlin就碰到WebRTC的API变化,确实容易懵!我之前升级到这个版本时也踩过同样的坑,给你捋捋怎么解决:
问题原因
从WebRTC 1.0.22920版本开始,peerConnectionFactory.createPeerConnection()方法的返回类型从原本的非空PeerConnection改成了可空的PeerConnection?——这是官方为了贴合Kotlin空安全设计做的调整,毕竟创建PeerConnection可能因为配置错误、资源不足等情况失败,返回null是更合理的设计。而你的代码里peerConnection变量应该是声明成了非空的PeerConnection类型,所以就出现了类型不匹配的报错。
几种解决方案
根据你的业务场景,选合适的方式处理:
1. 确定创建必然成功时,用!!强制非空
如果你的RTC配置、媒体约束都没问题,且PeerConnectionFactory初始化完全正确,能确保createPeerConnection不会返回null,可以用!!把可空类型转为非空:
val rtcConfig = PeerConnection.RTCConfiguration(iceServers) peerConnection = peerConnectionFactory.createPeerConnection(rtcConfig, getPeerConnectionMediaConstraints(), videoPeerConnectionListener)!!
⚠️ 注意:如果实际返回null,这行代码会直接抛出NullPointerException,所以只有在你能100%保证创建成功时才用这个方式。
2. 用Elvis运算符处理创建失败的情况
更符合Kotlin空安全理念的做法是,显式处理创建失败的场景:
val rtcConfig = PeerConnection.RTCConfiguration(iceServers) peerConnection = peerConnectionFactory.createPeerConnection(rtcConfig, getPeerConnectionMediaConstraints(), videoPeerConnectionListener) ?: run { // 这里写创建失败后的逻辑,比如抛出自定义异常、提示用户等 throw IllegalStateException("无法创建PeerConnection,请检查配置") }
3. 将变量声明为可空类型
如果你的业务逻辑允许peerConnection暂时为null,直接把变量声明改成可空:
var peerConnection: PeerConnection? = null // 赋值时就不会报错了 val rtcConfig = PeerConnection.RTCConfiguration(iceServers) peerConnection = peerConnectionFactory.createPeerConnection(rtcConfig, getPeerConnectionMediaConstraints(), videoPeerConnectionListener) // 后续使用时记得用安全调用 peerConnection?.createOffer(...)
内容的提问来源于stack exchange,提问作者Yan Rad
相关产品推荐
相关产品推荐

