kotlin - как сделать логическое значение Nullable внутри Parceable - PullRequest
0 голосов
/ 15 марта 2019

Наличие класса 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 ]

1 голос
/ 15 марта 2019

Вам нужен способ создать 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:)

1 голос
/ 15 марта 2019

Вы можете использовать .let{} для возврата вычисленного значения.

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