我使用了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
时它会错过地图。所以我正在考虑适当推荐的包裹地图的方法。有人建议吗?
我找到了解决方案,万一其他人需要帮助这里是工作代码,我的Map
是Map<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;
}