使用Smack Android将String转换为XMPP Stanza

时间:2016-09-09 06:55:24

标签: java android xmpp smack asmack

  • Q)从字符串生成XMPP Stanza。

  • Q)将字符串转换为XMPP Stanza。

在Android中使用Smack库,

Message message = new Message();
message.setStanzaId("123");
message.setFrom("923442621149");
message.setType(Message.Type.chat);
message.setBody("shanraisshan");

final String msgString = message.toXML().toString();
Log.e("message --->", msgString);

以上节后面生成的代码

msgString:

<message from='923442621149' id='123' type='chat'><body>shanraisshan</body></message>

我已将 msgString 保存到我的数据库中。

现在,我想做的是,从数据库中检索这个字符串

  • 将此 msgString 重新投放回Java 消息
  • 以便我可以使用属性( From,Body,Id
  • 使用 message.getFrom()

由于 消息 Stanza 的子类,我尝试了以下代码:

Stanza stanza = new Stanza() {
    @Override
    public CharSequence toXML() {
        return msgString;
    }
};
Log.e("stanza XML --->", stanza.toXML().toString());
Log.e("stanza getFrom() ->", stanza.getFrom() + ":");
Log.e("stanza getStanzaId() ->", stanza.getStanzaId() + ":");

控制台日志打印遵循

stanza XML --->: <message from='923442621149' id='123' type='chat'><body>shanraisshan</body></message>
stanza getFrom() ->: null:
stanza getStanzaId() ->: OtU0i-29:

我无法理解,为什么

  • stanza.toXML()。toString()在

  • 时打印正确的节
  • stanza.getFrom() null 而不是 923442621149

  • stanza.getStanzaId() OtU0i-29 而不是 123

另外,在将Stanza转换为Message时,会产生 ClassCastException

Message castedMsg = (Message)stanza;

产生

java.lang.ClassCastException:

简化内容

如何转换 msgString

msgString = "<message from='923442621149' id='123' type='chat'><body>shanraisshan</body></message>";

进入org.jivesoftware.smack.packet。消息类?

1 个答案:

答案 0 :(得分:6)

完成Smack Library source code on Github后,我发现图书馆正在使用PacketParserUtils.java方法 parseStanza() 来投放字符串到Stanza。

String  msgString = "<message from='923442621149' id='123' type='chat'><body>shanraisshan</body></message>";
Message message = (Message)PacketParserUtils.parseStanza(msgString);

Log.e("message XML->", message.toXML().toString());
Log.e("message getFrom()->", message.getFrom() + ":"); //923442621149:
Log.e("message getStanzaId()->", message.getStanzaId() + ":"); //123: