[英]XMPP XEP-0313 Smack Android Get the most recent message for all roster members
[英]How to parse custom roster query response in Android XMPP client with SMACK
就目前而言,我對XMPP和SMACK的了解很少,因此,如果我的問題不准確,請原諒。
登錄后,我收到帶有花名冊的數據包,如下所示:
<iq id="8CiUQ-1" type="result">
<query xmlns="jabber:iq:roster">
<item jid="625126126@saomeapp-test.cloudapp.net" name="Aziez" subscription="both" msgblock="none"/>
<item jid="547657221@saomeapp-test.cloudapp.net" name="Kmil" subscription="both" msgblock="none"/>
<item jid="553269257@saomeapp-test.cloudapp.net" name="grzegorz" subscription="both" msgblock="none"/>
<item jid="683494364@saomeapp-test.cloudapp.net" name="Wiktor2" subscription="both" msgblock="none"/>
<item jid="602914857@saomeapp-test.cloudapp.net" name="Art" subscription="both" msgblock="none"/>
<item jid="634926524@saomeapp-test.cloudapp.net" name="ml" subscription="both" msgblock="none"/>
</query>
</iq>
我知道這一點是因為我可以看到此數據包在SMACK標簽下打印到我的logcat中。
我需要訪問msgblock
參數。 org.jivesoftware.smack.RosterEntry
類將沒有msgblock
參數的getter,因為它是為此服務器實現定制的(我想)。 那我該如何訪問msgblock
參數呢?
這是我嘗試過的:
我叫: mConnection.addPacketListener(new RosterPacketListener(), new RosterPacketFilter());
其中, mConnection
是org.jivesoftware.smack.XMPPConnection;
的實例org.jivesoftware.smack.XMPPConnection;
。
過濾器如下所示:
private class RosterPacketFilter implements PacketFilter{
@Override
public boolean accept(Packet packet) {
return packet instanceof RosterPacket;
}
}
監聽器:
private class RosterPacketListener implements PacketListener {
@Override
public void processPacket(Packet packet) {
Log.d("tag", packet.toXML());
}
}
我完全不了解的部分是Log.d("tag", packet.toXML());
不包含msgblock
參數。 如何訪問我的花名冊中的msgblock
參數?
無需將自定義數據包偵聽器添加到連接對象。
從服務器獲取所有花名冊
Roster roster = mConnection.getRoster();
// collection of RosterEntry from roster object
Collection<RosterEntry> entries= roster.getEntries();
for(RosterEntry entry : entries)
{
Log.i("RosterName", "Name : "+ entry.getName());
Log.i("RosterName", "Name : "+ entry.getUser());
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.