可以将空值传递给包裹吗?
是否可以在parcel一个对象的时候写入null
给Parcel
,并且当再次进行重新编码时再返回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个点变得明显:
- 代码运行完美,没有任何
NullPointerException
- 反序列化的
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) }