Parcelable Map正确的方式?

问题描述 投票:0回答:1

我使用了Map的String和Pojo。我在implementing Parcelableclass。为了生成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时它会错过地图。所以我正在考虑适当推荐的包裹地图的方法。有人建议吗?

android parcelable
1个回答
0
投票

我找到了解决方案,万一其他人需要帮助这里是工作代码,我的MapMap<String,Document>,其中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;
}
© www.soinside.com 2019 - 2024. All rights reserved.