android-chat
android-chat copied to clipboard
自定义消息怎么接收服务端添加的消息问题
比如我发送了一张优惠券,但是后端会添加一些不可再消息界面看见的数据,那么我在TicketMessageContent里要怎么接口数据呢.
- 请参考 #655
- 消息里面有个
extra
字段,可以放一些附加数据
- 请参考android端Im如何自定义消息 #655
- 在里面的
extra
字段中,可以放一些附加信息
出了新的问题,现在自定义消息发出去了,聊天框里也能显示这消息但是点击这消息,RedPackerMessageContent却是空的,没有后端发来的任何信息
请检查你的自定义消息的decode
方法
请检查你的自定义消息的
decode
方法
public class RedPackerMessageContent extends MessageContent { private String displayName; private String portrait; private String slogan; private String redPacket;
public RedPackerMessageContent() {
}
public RedPackerMessageContent(String displayName, String portrait, String slogan) {
this.displayName = displayName;
this.portrait = portrait;
this.slogan = slogan;
}
public String getDisplayName() {
return displayName;
}
public void setDisplayName(String displayName) {
this.displayName = displayName;
}
public String getPortrait() {
return portrait;
}
public void setPortrait(String portrait) {
this.portrait = portrait;
}
public String getSlogan() {
return slogan;
}
public void setSlogan(String slogan) {
this.slogan = slogan;
}
public String getRedPacket() {
return redPacket;
}
public void setRedPacket(String redPacket) {
this.redPacket = redPacket;
}
@Override
public MessagePayload encode() {
MessagePayload payload = super.encode();
payload.content = redPacket;
try {
JSONObject objWrite = new JSONObject();
objWrite.put("d", displayName);
objWrite.put("p", portrait);
objWrite.put("s", slogan);
payload.binaryContent = objWrite.toString().getBytes();
} catch (JSONException e) {
e.printStackTrace();
}
return payload;
}
@Override
public void decode(MessagePayload payload) {
redPacket = payload.content;
try {
if (payload.binaryContent != null) {
JSONObject jsonObject = new JSONObject(new String(payload.binaryContent));
displayName = jsonObject.optString("d");
portrait = jsonObject.optString("p");
slogan = jsonObject.optString("s");
}
} catch (JSONException e) {
e.printStackTrace();
}
}
@Override
public String digest(Message message) {
return "[红包]:" + displayName;
}
@Override
public int describeContents() {
return 0;
}
@Override
public void writeToParcel(Parcel dest, int flags) {
super.writeToParcel(dest, flags);
dest.writeString(this.displayName != null ? this.displayName : "");
dest.writeString(this.portrait != null ? this.portrait : "");
dest.writeString(this.slogan != null ? this.slogan : "");
}
protected RedPackerMessageContent(Parcel in) {
super(in);
this.displayName = in.readString();
this.portrait = in.readString();
this.slogan = in.readString();
}
public static final Creator<RedPackerMessageContent> CREATOR = new Creator<RedPackerMessageContent>() {
@Override
public RedPackerMessageContent createFromParcel(Parcel source) {
return new RedPackerMessageContent(source);
}
@Override
public RedPackerMessageContent[] newArray(int size) {
return new RedPackerMessageContent[size];
}
};
payload.content 这里就是后端返回来的数据
打断点 MessageContent 没有返回后端的任何数据
- 后端发的消息格式,要和
encode
生成的MessagePayload
格式一样 - 请在
marsservice
进程decode
的地方打断点,或者加日志,看看这个地方收到的MessagePayload
对不对
可以了,就是decode里面的问题