Skip to content

Commit ee2d621

Browse files
Fix Parcelable serialization of metadata in Message
Replaces the use of writeMap/readHashMap for the metadata field with explicit serialization and deserialization of key-value pairs. This improves compatibility and reliability when passing Message objects between Android components.
1 parent 5ec6db4 commit ee2d621

File tree

1 file changed

+17
-2
lines changed
  • kommunicate/src/main/java/io/kommunicate/devkit/api/conversation

1 file changed

+17
-2
lines changed

kommunicate/src/main/java/io/kommunicate/devkit/api/conversation/Message.java

Lines changed: 17 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -144,7 +144,13 @@ public Message(Parcel in) {
144144
topicId = in.readString();
145145
connected = in.readByte() != 0;
146146
contentType = (short) in.readInt();
147-
metadata = in.readHashMap(String.class.getClassLoader());
147+
int metadataSize = in.readInt();
148+
metadata = new HashMap<>();
149+
for (int i = 0; i < metadataSize; i++) {
150+
String key = in.readString();
151+
String value = in.readString();
152+
metadata.put(key, value);
153+
}
148154
status = (short) in.readInt();
149155
hidden = in.readByte() != 0;
150156
replyMessage = in.readInt();
@@ -896,7 +902,16 @@ public void writeToParcel(Parcel dest, int flags) {
896902
dest.writeString(topicId);
897903
dest.writeByte((byte) (connected ? 1 : 0));
898904
dest.writeInt(contentType);
899-
dest.writeMap(metadata);
905+
// dest.writeMap(metadata);
906+
if (metadata != null) {
907+
dest.writeInt(metadata.size());
908+
for (Map.Entry<String, String> entry : metadata.entrySet()) {
909+
dest.writeString(entry.getKey());
910+
dest.writeString(entry.getValue());
911+
}
912+
} else {
913+
dest.writeInt(0);
914+
}
900915
dest.writeInt(status);
901916
dest.writeByte((byte) (hidden ? 1 : 0));
902917
dest.writeInt(replyMessage);

0 commit comments

Comments
 (0)