要求:找出price是否为空。由于原语浮点数据类型总是0.0,因此不能检查其是否为空,因此我选择使用Float代替,因为可以检查其是否为空。

public class QOptions implements Parcelable {
    public String text;
    public Float price;
}

protected QOptions(Parcel in) {
    text = in.readString();
    unit_price = in.readFloat();
}

@Override
public void writeToParcel(Parcel parcel, int i) {
    parcel.writeString(this.text);
    parcel.writeFloat(this.price);
}

但是,由于该类也实现了Parcelable,因此writeToParcel崩溃,出现以下异常:
试图在空对象引用上调用虚方法“浮点java.
例外情况是这一行:
包裹,书面贷款(这个价格);
如何将Float数据类型与writeToParcel一起使用而不导致异常?还是有更好的方法来满足我的要求?我只需要价格为零,如果它是零。

最佳答案

你可以用下面的方式处理。

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

读取浮点值-
unit_price = in.readByte() == 0x00 ? null : in.readFloat();

10-07 19:31
查看更多