【问题标题】:Why Parcel.writeBoolean(boolean) doesn't exist? [duplicate]为什么 Parcel.writeBoolean(boolean) 不存在? [复制]
【发布时间】:2016-08-10 06:43:29
【问题描述】:

当我需要将boolean 写入Parcel 时,我会这样做:

@Override
public void writeToParcel(Parcel dest, int flags) {
    dest.writeInt(myBoolean ? 1 : 0);
}

但是,方法writeBoolean不存在有什么原因吗?

【问题讨论】:

标签: android parcel


【解决方案1】:

您可以使用屏蔽和移位将布尔值打包成一个字节。这将是最有效的方法,并且可能是他们希望你做的。

查看此链接 https://developer.android.com/reference/android/os/Parcel.html 的 Primitives 部分

包裹你的布尔值..你可以使用http://www.parcelabler.com/

例如:

class BooleanSample {
    Boolean flag;
}

结果:

class BooleanSample implements Parcelable {
    Boolean flag;

    protected BooleanSample(Parcel in) {
        byte flagVal = in.readByte();
        flag = flagVal == 0x02 ? null : flagVal != 0x00;
    }

    @Override
    public int describeContents() {
        return 0;
    }

    @Override
    public void writeToParcel(Parcel dest, int flags) {
        if (flag == null) {
            dest.writeByte((byte) (0x02));
        } else {
            dest.writeByte((byte) (flag ? 0x01 : 0x00));
        }
    }

    @SuppressWarnings("unused")
    public static final Parcelable.Creator<BooleanSample> CREATOR = new Parcelable.Creator<BooleanSample>() {
        @Override
        public BooleanSample createFromParcel(Parcel in) {
            return new BooleanSample(in);
        }

        @Override
        public BooleanSample[] newArray(int size) {
            return new BooleanSample[size];
        }
    };
}

【讨论】:

  • Parcel.writeByte() 在内部使用 Parcel.writeInt()。你应该写 int 值。
猜你喜欢
  • 2018-06-06
  • 1970-01-01
  • 1970-01-01
  • 2023-03-12
  • 2011-07-10
  • 1970-01-01
  • 2019-09-27
  • 2018-08-16
  • 2015-11-29
相关资源
最近更新 更多