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?

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。

  • org.gradle.api.tasks.TaskExecutionException:执行失败的任务':app:compileDebugKotlin'
  • android.widget.Switch - 开/关事件监听器?
  • 应用程序没有安装错误在android中kotlin gradle 3.0.0-alpha5
  • 在Android的Kotlin的帮助下开始一个项目
  • Kotlin中的Android应用程序不能正确地扩大片段布局
  • Live模板不能在Kotlin中工作
  • 各种问题@NonNull,@NotNull和@ParametersAreNonnullByDefault
  • 如何使用Kotlin在Android中分享图像?
  • types推断失败。 请尝试指定types参数显式:Kotlin
  • kotlin是function性的还是程序性的?
  • 如何检查字符串不等于一个字符串,那么它将工作,否则没有? 在kotlin
  • Kotlin language will be the best programming language for Android.