至于现在我对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;
的实例。
过滤器看起来像这样:
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
参数?
答案 0 :(得分:0)
无需向连接对象添加自定义数据包侦听器。
从服务器获取所有名单
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());
}