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?

在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。

Interesting Posts