【问题标题】:Kotlin - Parcelable Type mismatch: Required: String, Found: String?Kotlin - Parcelable 类型不匹配:必需:字符串,找到:字符串?
【发布时间】:2020-02-09 22:27:43
【问题描述】:

编译器给我错误Type mismatch: Required: String, Found: String? 的行 parcel.writeString(firstName)parcel.writeString(lastName) 在 Parcelable 数据类的构造函数中。

这是我的课。

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)
    }
}}

我不明白为什么会出现错误以及如何纠正它。

【问题讨论】:

    标签: android-studio kotlin parcelable


    【解决方案1】:

    实际上,您的错误是由其他行引起的。 parcel.readString() 返回String?,您尝试将其作为firstName 参数传递给您的主构造函数,该参数具有String 类型。要修复它,例如,如果返回的字符串为空,您可以传递一个默认值:

    constructor(parcel: Parcel) : this(
        parcel.readString() ?: "",
        parcel.readString() ?: "",
        parcel.readInt()
    )
    

    【讨论】:

    • 感谢您的回答。即使有行val firstName: String, val lastName: String,,我也应该插入?:""
    • 是的,因为parcel.readString()返回一个可空类型String?,而firstName有不可空类型String,所以你必须处理空值。
    猜你喜欢
    • 1970-01-01
    • 2022-10-13
    • 2018-12-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多