我正在使用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
时它将丢失地图。因此,我正在考虑正确的推荐方式来包裹地图。有人建议吗?
答案 0 :(得分:0)
我找到了解决方案,以防万一其他人需要帮助
这是工作代码,我的Map
是Map<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;
}