Nulls可以传递给包裹吗?

Fat*_*tum 4 android parcel parcelable

是否可以在null分配Parcel对象时写入,并在null再次取消对象时再次返回?

我们假设我们有以下代码:

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

使用NullPointerException时从包裹中读取此值是否会得到Parcel.readString()

或者我会得到一个null价值?

Ric*_*ier 14

是的,您可以传递nullParcel.writeString(String)方法.

再次阅读时Parcel.readString(),您将获得一个null价值.


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

public class Test implements Parcelable {
    public final int id;
    private final String name;
    public final String description;
    ...
Run Code Online (Sandbox Code Playgroud)

您可以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();
}
Run Code Online (Sandbox Code Playgroud)

运行此代码并将Test对象作为Parcelable extra 传递时Intent,2点变得明显:

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

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