首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在使用Parcelable接口时序列化空值

如何在使用Parcelable接口时序列化空值
EN

Stack Overflow用户
提问于 2011-05-06 07:09:57
回答 3查看 28.9K关注 0票数 63

关于我的代码示例,如果一个Locable的变量为空,我应该怎么做?例如,现在如果l.getZoom()返回null,我就得到了NullPointerException。

代码语言:javascript
复制
@Override
public void writeToParcel(Parcel parcel, int arg1) {
    parcel.writeInt(count);
    for(Locable l:locableArr){
        parcel.writeInt(l.getOriginId());
        parcel.writeInt(l.getLocableType());
        parcel.writeInt(l.getZoom());
        parcel.writeDouble(l.getLatituda());
        parcel.writeDouble(l.getLongituda());
        parcel.writeString(l.getTitle());
        parcel.writeString(l.getSnipet());
    }

}

谢谢!

EN

回答 3

Stack Overflow用户

发布于 2012-05-27 05:21:14

您可以使用Parcel.writeValue来封送具有空值的泛型对象。

票数 113
EN

Stack Overflow用户

发布于 2015-05-02 06:40:11

我使用的Parcelable类也有IntegerBoolean字段,这些字段可以为空。

我在使用泛型Parcel.writeValue方法时遇到了问题,特别是当我试图通过Parcel.readValue读回它的时候。我一直得到一个运行时异常,说它不能弄清楚包裹对象的类型。

最终,我通过使用带有类型转换的Parcel.writeSerializableParcel.readSerializable解决了这个问题,因为IntegerBoolean都实现了Serializable接口。read和write方法为您处理null值。

票数 24
EN

Stack Overflow用户

发布于 2012-12-21 04:39:33

这是我想出的安全编写字符串的解决方案:

代码语言:javascript
复制
private void writeStringToParcel(Parcel p, String s) {
    p.writeByte((byte)(s != null ? 1 : 0));
    p.writeString(s);
}

private String readStringFromParcel(Parcel p) {
    boolean isPresent = p.readByte() == 1;
    return isPresent ? p.readString() : null;
}
票数 16
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5905105

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档