可包裹地图的正确方法?

时间:2019-03-04 09:43:00

标签: android parcelable

我正在使用Map的String和Pojo。我是implementing Parcelable中的class。为了生成parcelable,我正在使用 Michal Charmas 的插件Android Parcelable code generator。它对其他所有功能都适用,但对Map<String, Object>而言则无效。这是我的代码

 @Override
    public void writeToParcel(Parcel dest, int flags) {

        dest.writeInt(this.driverDocuments.size());
        for (Map.Entry<String, Document> entry : this.driverDocuments.entrySet()) {
            dest.writeString(entry.getKey());
            dest.writeSerializable(entry.getValue());
        }
    } 

当然,如果地图为null,它将抛出null指针。但是,如果我们应用null检查,则在null时它将丢失地图。因此,我正在考虑正确的推荐方式来包裹地图。有人建议吗?

1 个答案:

答案 0 :(得分:0)

我找到了解决方案,以防万一其他人需要帮助 这是工作代码,我的MapMap<String,Document>的地方,文档是另一个Pojo

@Override
public void writeToParcel(Parcel dest, int flags) {

    dest.writeByte((byte) (driverDocuments == null ? 0x00 : 0x01));
    if (driverDocuments != null) {
        dest.writeInt(this.driverDocuments.size());
        for (Map.Entry<String, Document> entry : this.driverDocuments.entrySet()) {
            dest.writeString(entry.getKey());
            dest.writeSerializable(entry.getValue());
        }
    }
}

 protected Model(Parcel in) {

    if (in.readByte() == 0X01) {
        int documentSize = in.readInt();
        this.driverDocuments = new HashMap<String, Document>(documentSize);
        for (int i = 0; i < documentSize; i++) {
            String key = in.readString();
            Document value = (Document) in.readSerializable();
            this.driverDocuments.put(key, value);
        }
    } else
        driverDocuments = null;
}