Android parcelable – 写入可以为空

我有我的parcelable课文章:

class Article : Parcelable { var image: Long? = null var category: String? = null var videos: String? = null constructor(data: JSONObject) { if (condition) image = 50000L category = data.getString("category") videos = data.getString("videos") } private constructor(parcel: Parcel) { image = parcel.readLong() category = parcel.readString() videos = parcel.readString() } override fun writeToParcel(dest: Parcel, flags: Int) { dest.writeLong(image) // error here dest.writeString(category) dest.writeString(videos) } override fun describeContents(): Int = 0 companion object { @JvmField val CREATOR: Parcelable.Creator
= object : Parcelable.Creator
{ override fun createFromParcel(parcel: Parcel): Article = Article(parcel) override fun newArray(size: Int): Array
= arrayOfNulls(size) } } }

但是我的类在编写图像var时出现types不匹配。 它期待一个长而不长的? 我明白,如果我这样做可以解决这个问题:

 dest.writeLong(image!!) 

但问题是这个var在我的上下文中可能真的是空的。 我不希望将我的图像var定义为像0这样的默认值。我真的希望var保持空值。

有没有办法写一个可空的var?

  • Kotlin:使用自定义setter时没有lateinit的解决方法?
  • Kotlin和Android数据绑定(BuildTools 2.0.0)
  • Android Studio 3.0在重建之后重复压缩输入警告
  • 如何使用kotlin来定义一个android应用程序类?
  • Kotlin中未解决的参考异步
  • 如何使用Tab布局与数据绑定库和Kotlin
  • IllegalArgumentException:不支持addAccount
  • 在Kotlin中使用FirebaseListAdapter
  • One Solution collect form web for “Android parcelable – 写入可以为空”

    在Java中,我们处理Long (而不是long )的方式是在Android源代码之后编写的,用于编写其他“可空”types:您首先编写某种标记值来指示null与非null,然后有条件地写真正的价值。

     private static final int NULL_ELEMENT_FLAG = 0; private static final int NONNULL_ELEMENT_FLAG = 1; public static void writeLong(Parcel dest, Long l) { if (l != null) { dest.writeInt(NONNULL_ELEMENT_FLAG); dest.writeLong(l); } else { dest.writeInt(NULL_ELEMENT_FLAG); } } public static Long readLong(Parcel in) { if (in.readInt() != NULL_ELEMENT_FLAG) { return in.readLong(); } else { return null; } } 

    希望你能适应这kotlin。

    Kotlin language will be the best programming language for Android.