使用 Smack 将字符串转换为 XMPP 节 Android
Convert String to XMPP Stanza using Smack Android
或
Q) 从字符串生成 XMPP 节。
Q) 将字符串转换为 XMPP 节。
通过在 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 MessageClass
- 以便我可以使用属性 (From, Body, Id)
- 使用message.getFrom()
因为 Message 是 Stanza[=105 的子 class =],我试过下面的代码:
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() 打印正确的节 while
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.消息class?
在通过 Smack Library source code on Github, I found out that the library is using PacketParserUtils.java 方法的 parseStanza() 将 String 转换为 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:
或
Q) 从字符串生成 XMPP 节。
Q) 将字符串转换为 XMPP 节。
通过在 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 MessageClass
- 以便我可以使用属性 (From, Body, Id)
- 使用message.getFrom()
因为 Message 是 Stanza[=105 的子 class =],我试过下面的代码:
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() 打印正确的节 while
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.消息class?
在通过 Smack Library source code on Github, I found out that the library is using PacketParserUtils.java 方法的 parseStanza() 将 String 转换为 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: