为啥 Parcel.writeBoolean(boolean) 不存在? [复制]

Posted

技术标签:

【中文标题】为啥 Parcel.writeBoolean(boolean) 不存在? [复制]【英文标题】: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不存在有什么原因吗?

【问题讨论】:

如果你真的想要,请使用writeValue 或许你可以看看这个:code.google.com/p/android/issues/detail?id=5973 【参考方案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 值。

以上是关于为啥 Parcel.writeBoolean(boolean) 不存在? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

为啥对成员“下标”的引用模棱两可?

为啥dependencyManagement中有spring-boot-dependencies?

为啥 datepicker 没有以 Rails 3 形式显示

为啥我的查询结果只输出一行?

为啥连词的电子匹配对顺序/大小写策略敏感?

为啥 Jest 在测试“Colyseus”游戏时会出现这个错误?