Android:接收消息时出现XMPP消息格式问题

时间:2017-04-17 09:48:19

标签: android xmpp chat

我在Android中通过XMPP接收消息时遇到问题。

发送消息格式如下:

<?xml version="1.0" encoding="UTF-8"?>
<message xmlns="jabber:client" to="33@xx.xx.xx" from="1014@xx.xx.xx" 
type="chat" mediaType="text">
<body>Hello</body>
<mediaType>text</mediaType>
<mediaUrl />
<thumbUrl />
<from_id>1014</from_id>
<user_profile_pic>http://www..</user_profile_pic>
<user_profile_name>XYZ</user_profile_name>
<uniqueID>xsFf2ifTszKVg11ogAlgziD1IwWjcJ</uniqueID>
</message>

但我在Android XMPP中获得了以下格式:

<?xml version="1.0" encoding="UTF-8"?>
<message to="33@xx.xx.xx" from="1014@35.166.209.154/a94o853phq" type="chat">
<body>Hello</body>
<thread>61242b7c-e843-45cf-a9ff-0383ebf60aeb</thread>
<mediaType xmlns="jabber:client" />
<mediaUrl xmlns="jabber:client" />
<thumbUrl xmlns="jabber:client" />
<user_profile_pic xmlns="jabber:client" />
<user_profile_name xmlns="jabber:client" />
<uniqueID xmlns="jabber:client" />
<from_id xmlns="jabber:client" />
</message>

发送消息代码:

DefaultExtensionElement extXMPPMessage = new DefaultExtensionElement("message", "jabber:client");
   extXMPPMessage.setValue("to", toUser);
   extXMPPMessage.setValue("from", fromUser);
   extXMPPMessage.setValue("body", message);
   extXMPPMessage.setValue("type", type);
   extXMPPMessage.setValue("mediaType", mediaType);
   extXMPPMessage.setValue("mediaUrl", mediaURL);
   extXMPPMessage.setValue("thumbUrl", thumbURL);
   extXMPPMessage.setValue("from_id", from_id);
   extXMPPMessage.setValue("user_profile_pic", user_profile_pic);
   extXMPPMessage.setValue("user_profile_name", user_profile_name);
   extXMPPMessage.setValue("uniqueID", uniqueID);

   Message msg = new Message();
   msg.setType(Message.Type.chat);
   msg.setTo(toUser);
   msg.setFrom(fromUser);
   msg.setBody(message);
   msg.addExtension(extXMPPMessage);
   chat.sendMessage(msg); //chat is Object of Chat class

我能够在界面方法中收到一条消息:

@Override
public void processMessage(Chat chat, Message message) {
   Log.e(TAG, "ProcessMessage Message received " + message.toString());
}

我不知道是什么问题,我得到了完美的身体,我也很成功收到消息但是mediaType,用户名,用户个人资料每个标签都空了,请帮帮我。谢谢。

1 个答案:

答案 0 :(得分:1)

您正在名称空间中传递jabber:client,如下所示:

new DefaultExtensionElement("message", "jabber:client");

因此,当您收到它时,您将jabber:client中的xmlns

如果您想通过DefaultExtensionElement传递数据,请使用如下:

DefaultExtensionElement extEenderName = new DefaultExtensionElement(
                    "msgSenderName", "");
            extEenderName.setValue("msgSenderName", "Sanat");
            msg.addExtension(extEenderName);

不要在那里传递namespace。我使用单DefaultExtensionElement作为单值。它的工作。

不要传递给DefaultExtensionElement中的身体。只需传递给Message对象中的正文。然后为其他内容添加单独的扩展名。

对其他类型数据的一个建议是将JsonObject作为字符串传递给您的文本内容和其他数据,如mediaType,mediaUrl等。