可以将空值传递给包裹吗?

是否可以在parcel一个对象的时候写入nullParcel ,并且当再次进行重新编码时再返回null

假设我们有以下代码:

 public class Test implements Parcelable { private String string = null; public Test(Parcel dest, int flags) { source.writeString(string); } } 

使用Parcel.readString()从parcel读取这个值时会得到NullPointerException吗?

或者我会得到一个null值?

是的,您可以将null传递给Parcel.writeString(String)方法。

当你用Parcel.readString()再次读出它时,你会得到一个null值。


例如,假设你有一个包含以下字段的类:

 public class Test implements Parcelable { public final int id; private final String name; public final String description; ... 

您可以像这样创建Parcelable实现(使用Android Studio autoparcelable工具):

 @Override public void writeToParcel(Parcel dest, int flags) { dest.writeInt(id); dest.writeString(null); // NOTE the null value here dest.writeString(description); } protected Test(Parcel in) { id = in.readInt(); name = in.readString(); description = in.readString(); } 

当运行这个代码并在一个Intent传递一个Test对象作为一个Parcelable extra时,2个点变得明显:

  1. 代码运行完美,没有任何NullPointerException
  2. 反序列化的Test对象的值name == null

您可以在相关问题的评论中看到类似的信息:

  • 包裹,类加载器和读取空值

在我的情况(Kotlin)

  override fun writeToParcel(parcel: Parcel, flags: Int) { parcel.writeInt(if (PapperId == null) -1 else PapperId) parcel.writeString( if (Nome == null) "" else Nome) }