2016-07-08 83 views
1

我正在開發一個android聊天應用程序,使用Openfire作爲XMPP的支持服務器,並將smack庫作爲XMPP的android實現。Smack接收XML格式的消息可以將它們更改爲JSON嗎?

事情進展順利。直到我找到從另一個用戶收到的消息。格式是這樣的:

<message to="[email protected]" id="0mpqe-10" type="chat" from="[email protected]/Smack"> 
    <body>{"Date":"8 Jul 2016","Time":"0:40p.m.","body":" vhklv","isMine":true,"msgid":"909-08","receiver":"rajesh2","sender":"rajesh1","senderName":"rajesh1"}</body> 
    <thread>06ed73bb-21ad-4276-80cb-0ea4fc9d9dfb</thread> 
</message> 

我的監聽器收到信息:

private class MMessageListener implements ChatMessageListener { 

    public MMessageListener(Context contxt) { 
    } 

    @Override 
    public void processMessage(final org.jivesoftware.smack.chat.Chat chat, 
           final Message message) { 
     Log.i("MyXMPP_MESSAGE_LISTENER", "Xmpp message received: '" 
       + message); 

    } 

} 

我的問題是:我可以在JSON格式而不是XML 收到此消息?

由於我正在學習smack和xmpp,請指導我如果我在某些地方有錯誤。糾正我,如果你們中任何一個人發現我錯了。

+0

服務器端開發人員應該使它成爲JSON格式,你不能從你的Android應用程序中完成 –

+0

沒有服務器端開發@ZahidulIslam。我們只是在xampp中有一個數據庫,而Openfire提供了一切。 –

+0

你真的想用JSON接收消息嗎?或者你只是想在''元素(''「Date」:「2016年7月8日」,「時間」:「0:40 p.m。」,「body」:「vhklv」)中提取JSON。 ..「)的消息節? – Flow

回答

1

您可以通過Github上的a project將消息轉換爲JSON格式。

例子:

public class Main { 

    public static int PRETTY_PRINT_INDENT_FACTOR = 4; 
    public static String TEST_XML_STRING = 
    "<?xml version=\"1.0\" ?><test attrib=\"moretest\">Turn this to JSON</test>"; 

    public static void main(String[] args) { 
    try { 
     JSONObject xmlJSONObj = XML.toJSONObject(TEST_XML_STRING); 
     String jsonPrettyPrintString = xmlJSONObj.toString(PRETTY_PRINT_INDENT_FACTOR); 
     System.out.println(jsonPrettyPrintString); 
    } catch (JSONException je) { 
     System.out.println(je.toString()); 
    } 
    } 
} 

輸出是:

{ 
    "test": { 
    "attrib": "moretest", 
    "content": "Turn this to JSON" 
    } 
} 

幸得Quickest way to convert XML to JSON in Java

+0

其實這不是我正在尋找的因爲我不想將XML轉換爲JSON,但我需要我的openfire直接響應JSON。如果不可能,我會試一試。謝謝你的努力..! –

+0

對不起...但我已經提到原始帖子的鏈接,我只是拿起這個例子。 – Khan

+0

@Khan你能幫我嗎?http://stackoverflow.com/questions/41627599/how-to-configure-push-mode-configuration-in-xmpp-with-fcm-refresh-token-using-sm –

1

的Json它不是Openfire的回覆格式。 當然,你可以重寫所有的Openfire在Json中「交談」,但對我來說毫無意義。

我建議你:

  • 如果您有性能問題,你可以看看也許爲Ejabber
  • 如果你需要一個JSON,也許韻律IM有一個插件
  • 如果你不想用XmlPullParser弄壞你的頭,試試 到Bubbler替代Smack。
  • 如果你不覺得有信心與XML,只是實施 「的toJSON」 對每一節類型,所以你必須像
    (感謝@Khan)

MyMessage extends Message 

public String toJson() 
{ 
JSONObject xmlJSONObj = XML.toJSONObject(this.toXML()); 
     String jsonPrettyPrintString = xmlJSONObj.toString(PRETTY_PRINT_INDENT_FACTOR); 
} 

你可以使用Json。

+0

我還沒有寫openfire。我剛安裝在我的電腦上。可以請給我一些東西(一些設置類型的東西),這將使我的開放式談話在JSON中。如果那是不可能的,那麼我會改用你的選擇。謝謝..!! –

+0

如果沒有大量重寫Openfire在Json中談論是不可能的,但正如我所建議的那樣,如果問題只是在客戶端上使用Json,只需擴展自定義Stanzas(消息,Iq和狀態)來編寫Json並使用它。 – MrPk

+0

okk謝謝你的建議,我會研究它...! –

相關問題