簡體   English   中英

使用Smack Android將String轉換為XMPP Stanza

[英]Convert String to XMPP Stanza using Smack Android

要么

  • Q)從String生成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 Message Class
  • 這樣我就可以使用屬性( From,Body,Id
  • 使用message.getFrom()

由於MessageStanza的子類,我嘗試了以下代碼:

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。 消息類?

Github上瀏覽Smack Library源代碼后 ,我發現該庫正在使用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:

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM