Kotlin-如何在Parceable中创建可为空的布尔值

时间:2019-03-15 01:14:09

标签: kotlin nullable parcelable

具有一个Parcelable类,其可空布尔值默认为null

可以做到

parcel.writeByte(if (isAllowed==null) -1 else (if (isAllowed) 1 else 0))

但是如何找回并传递给承包商?

是否有更好的方法来对可空布尔值进行序列化/反序列化?

  class Config(val isAllowed: Boolean?=null, val startPos: Int=-1 ) : Parcelable {
      constructor(parcel: Parcel) : this(
        parcel.readByte() != 0.toByte(),
        parcel.readInt()


      override fun writeToParcel(parcel: Parcel, flags: Int) {
          parcel.writeByte(if (isAllowed) 1 else 0)
          parcel.writeInt(startPos)

      }
......

2 个答案:

答案 0 :(得分:1)

您可以使用.let{}返回计算值。

constructor(parcel: Parcel) : this(parcel.readByte().let { if(it < 0) null else (it > 0) },parcel.readInt())

答案 1 :(得分:1)

您需要一种从Config创建Parcel的方法,但是即使大多数示例都这样做,也不一定必须是构造函数。在您的CREATOR中:

fun createFromParcel(parcel: Parcel): Config {
    val parcelByte = parcel.readByte()
    val isAllowed = if (parcelByte < 0) null else parcelByte > 0
    val startPos = parcel.readInt()
    return Config(isAllowed, startPos)
}

很明显,如果您需要多次,可以将其提取到fun Parcel.read(write)NullableBoolean()中。

或仅使用@Parcelize :)