是否可以在null
分配Parcel
对象时写入,并在null
再次取消对象时再次返回?
我们假设我们有以下代码:
public class Test implements Parcelable { private String string = null; public Test(Parcel dest, int flags) { source.writeString(string); } }
使用NullPointerException
时从包裹中读取此值是否会得到Parcel.readString()
?
或者我会得到一个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(); }
运行此代码并将Test
对象作为Parcelable extra 传递时Intent
,2点变得明显:
代码运行完美,没有任何NullPointerException
反序列化的Test
对象具有值name == null
您可以在对此相关问题的评论中看到类似的信息:
Parcel,ClassLoader和Reading Null值