2013-08-28 50 views
0

我通過smack發送信息時遇到問題。我處理XML從發送裝置,它是:無法接收到來自信息的分機

<message id="qOP8c-14" to="52812" from="59271" type="chat"><body>dgggxhhhd</body><thread>52812</thread><datestamp xmlns="jabber:client">2013-08-28T03:59:41Z</datestamp></message> 

和xml在接收裝置是:

<message id="zqy34-12" to="[email protected]" from="59270" type="chat"><body>rmhxmxt,jxtj,dtj,</body><thread>59271</thread><datestamp xmlns="jabber:client"></datestamp></message> 

你可以看到日期戳是空的。我正在使用Flowdalic的Asmack Library(https://github.com/flowdalic/asmack)。
請幫幫我。這是圖書館的問題嗎?

回答

1

正如此線程所解釋的(https://stackoverflow.com/a/11141819/474002):時間戳不是常規消息的一部分。因此你不能提取它。

我想你可以發送一個自定義數據包(使用PacketExtension)來擴展你的消息包以包含時間戳信息。

Message message = new Message(); 
DefaultPacketExtension yourExt = new DefaultPacketExtension("your_ext", "com:your:ext"); 
yourExt.setValue("timestamp", YOUR_TIMESTAMP); 
messgae.addExtension(yourExt); 
0

一個簡單的解決方案我實現了(只有工作,如果你的用戶都使用您的客戶端)是將時間標記的數據包ID(也包括一些其他的字符串,以減輕衝突)在ID前面。

在millis中的Java時間將是13個字符,直到2200年的東西,所以你可以得到前13個字符,甚至是未來的證據;

int timeLength String.valueOf(System.currentTimeMillis()).length() 

會給你戳的長度在你的包ID

然後在拍擊

packet.getPacketID.subString(0, timeLength) 
+0

實際閱讀Brownys解決方案,它是更優雅! –