2016-08-10 20 views
1

私はParcelbooleanを記述する必要があるとき、私はこれを行う:、なぜParcel.writeBoolean(boolean)が存在しないのですか?

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

をしかし、メソッドのいずれかの理由があるwriteBoolean存在しませんか?

+0

あなたの場合本当に欲しいです、 'writeValue'を使用してください – pskink

+1

次のURLをご覧ください:https://code.google.com/p/android/issues/detail?id=5973 –

答えて

0

マスキングとシフトを使用してブール値をバイトにパックすることができます。それはそれを行う最も効率的な方法であり、おそらく彼らがあなたがすることを期待するものです。

チェックこのリンクのプリミティブ部分はhttps://developer.android.com/reference/android/os/Parcel.html

あなたのブール値を区分けするために..あなたが使用することができます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]; 
     } 
    }; 
} 
関連する問題