2013-08-28 4 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> 

Вы можете увидеть штамп даты пуст. Я использую Asmack Library of Flowdalic (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 ,

Время Java в миллисе будет длиной до 13 символов до 2200, чтобы вы могли просто получить первые 13 символов или даже будущие доказательства;

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

Даст вам длину метки времени в вашем пакета ID

Затем в Смак

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

На самом деле читает решение Brownys, это более элегантно! –

Смежные вопросы