在 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:

  • An XMPP address (e.g.jsmith@example.com).
  • A name you've assigned to the user (e.g. "Joe").
  • The list of groups in the roster that the entry belongs to. If the roster entry belongs to no groups, it's called an "unfiled entry".

简单的说就是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

最新文章

  1. Codeforces Round #279 (Div. 2) vector
  2. WebStorm 11、PhpStorm 10免费激活(不需要注册码)
  3. PHPer书单
  4. Centos6.5 下安装PostgreSQL9.4数据库
  5. memache session
  6. linux设备驱动归纳总结(三):5.阻塞型IO实现【转】
  7. Linux设备模型——设备驱动模型和sysfs文件系统解读
  8. 设计模式_Facade_门面模式
  9. Redis & Sentinel 安装脚本
  10. OD: Windows Driver Fuzz
  11. linux命令和知识点
  12. 【Python3之迭代器,生成器】
  13. IOS开发之XCode学习008:UIViewController基础
  14. 收集Typecho 0.9还能用的插件
  15. 利用JAVA API函数实现数据的压缩与解压缩
  16. layer.tips属性
  17. Git .gitignore文件说明
  18. 《Linux内核分析》第八周学习总结
  19. PHP mysqli_free_result()与mysqli_fetch_array()函数
  20. 拼接的html的onclick事件中无法传递对象给js方法的处理办法

热门文章

  1. expect spawn、linux expect 用法小记
  2. 使用断言assert
  3. Html.Action和Html.RederAction来创建子视图
  4. [FileStream] 使用
  5. C#Socket 案例
  6. KindleRSS推送服务器搭建
  7. c语言,全局变量,局部变量,外部函数,内部函数,stasic和extern的复习总结
  8. dll signing issue
  9. Hibernate学习笔记--核心编程
  10. Android MVP模式 简单易懂的介绍方式