XMPP通讯开发-服务器好友获取以及监听状态变化
在 XMPP通讯开发-好友获取界面设计 我们设计了放QQ的列表功能,这里我们获取我们服务器上的 数据。
这一部分知识我们可以查看smack_3_3_0/smack_3_3_0/documentation/roster.html,这个是官方的文档,介绍了我们可以使用Roster来获取,同时我们还可以注册监听器,当用户的状态信息发生变化的时候可以通知UI进行更新。
获取好友实体Roster是一个集合,我们看一下集合中的实体是由什么组成的。
Every user in a roster is represented by a RosterEntry, which consists of:
简单的说就是XMPP地址,用户名,用户组
public void getRoster(){ if(conn != null){ roster = conn.getRoster(); Collection<RosterEntry> entries = roster.getEntries(); for(RosterEntry entry : entries){ System.out.println(entry); } } }
我调试的打印信息如下,可以看到格式里面分别包含用户名,XMPP地址,用户组
dfffff: dfff@zhangjie [Friends]
sdfsdf: sdf@zhangjie [Friends]
123: 123@zhangjie [Friends]
代码如下:
Collection<RosterGroup> groups = roster.getGroups(); for(RosterGroup group : groups){ System.out.println(group.getName()); }
终端的调试信息:
客户
好友
Friends
当然我们还可以添加用户组和用户同时也可以删除
createGroup
createEntry
removeEntry
Roster还能够监听状态变化,方法如下:
/** * 注册监听状态变化 */ public void getRosterPresenceChange(){ if(roster != null){ roster.addRosterListener(new RosterListener(){ @Override public void entriesAdded(Collection<String> addresses) { } @Override public void entriesUpdated(Collection<String> addresses) { } @Override public void entriesDeleted(Collection<String> addresses) { } @Override public void presenceChanged(Presence prsnc) { System.out.println("Change: "+ prsnc.getFrom()+" status :"+prsnc.getStatus()); } }); } }
将好友中的123登出:
Change: 123@zhangjie/Spark 2.6.3 status :null
然后登陆123:
Change: 123@zhangjie/Spark 2.6.3 status :在线
下一章会将界面和后台数据结合起来,实现用户列表功能
源码项目:https://github.com/jwzhangjie/IChat_PC.git