android-studio - Kotlin - Parcelable 类型不匹配:必需:字符串,找到:字符串?
问题描述
编译器在Parcelable 数据类的构造函数内部和Type mismatch: Required: String, Found: String?
行
给我错误。parcel.writeString(firstName)
parcel.writeString(lastName)
这是我的课。
data class Mouse(
val firstName: String,
val lastName: String,
val age: Int ) : Parcelable {
constructor(parcel: Parcel) : this(
parcel.readString(),
parcel.readString(),
parcel.readInt()
)
override fun writeToParcel(parcel: Parcel, flags: Int) {
parcel.writeString(firstName)
parcel.writeString(lastName)
parcel.writeInt(age)
}
override fun describeContents(): Int {
return 0
}
companion object CREATOR : Parcelable.Creator<Mouse> {
override fun createFromParcel(parcel: Parcel): Mouse {
return Mouse(parcel)
}
override fun newArray(size: Int): Array<Mouse?> {
return arrayOfNulls(size)
}
}}
我不明白为什么会出现错误以及如何纠正它。
解决方案
实际上,您的错误是由其他行引起的。parcel.readString()
return ,然后您尝试将其作为具有类型的参数String?
传递给您的主构造函数。要修复它,例如,如果返回的字符串为空,您可以传递一个默认值:firstName
String
constructor(parcel: Parcel) : this(
parcel.readString() ?: "",
parcel.readString() ?: "",
parcel.readInt()
)
推荐阅读
- apache-spark - 在 pyspark 中执行 partitionBy 列时消除特定列的空值行
- php - 无法从 laravel 的另一个表中获取 id
- python - 让子弹朝玩家面对的方向发射
- github - 推送失败 - IntelliJ
- azure - Azure 服务总线 - 如何将元数据添加到消息中
- xml - MLT/XML:优化标签中的重复属性列表
- node.js - TypeError:无法读取 null 的属性“代码”
- angular - Angular 7:服务未动态更新页面,重新加载页面后更新
- python-3.x - 如何使用动态基类初始化实例
- node.js - 我是节点 js 的新手,正在尝试在 Dialogflow 中实现“帐户登录”但是,我收到此错误“代理返回空 TTS”