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:
- 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
XMPP通讯开发-服务器好友获取以及监听状态变化的更多相关文章
- XMPP通讯开发-仿QQ显示好友列表和用户组
在 XMPP通讯开发-服务器好友获取以及监听状态变化 中我们获取服务器上的用户好友信息,然后结合XMPP通讯开发-好友获取界面设计 我们将两个合并起来,首先获取用户组,然后把用户组用List ...
- XMPP通讯开发-好友获取界面设计
在XMPP通讯开发-服务器连接 中我们成功连接到服务器上面,然后进入到主界面,接下来就是获取好友列表,这里我们分段开发,首先就是界面的设计,这里仿照QQ好友界面,里面的数据先是用模拟的,下一章获取服务 ...
- Windows Phone 8 获取与监听网络连接状态(转)
原文地址:http://www.cnblogs.com/sonic1abc/archive/2013/04/02/2995196.html 现在的只能手机对网络的依赖程度都很高,尤其是新闻.微博.音乐 ...
- JS 获取和监听屏幕方向变化(portrait / landscape)
移动设备的屏幕有两个方向: landscape(横屏)和portrait(竖屏),在某些情况下需要获取设备的屏幕方向和监听屏幕方向的变化,因此可以使用Javascript提供的 MediaQueryL ...
- 服务器重启后Oracle监听服务没有自动启动的解决方案
最近一直在被这样一个问题烦恼,就是服务器断电重启后,Oracle监听服务没有正常自动启动(监听服务已经设置为自启动). 具体是这样的,监听服务设置为开机自启动,Oracle数据库服务设置为开机延时启动 ...
- Tomcat服务器无法启动socket监听端口
最近生成一个新的web服务器,在启动后无法启动socket监听,检查程序本身无问题, 找原因,只是发布时搞错.处理如下: 1.在Eclipse平台 删除原来的web server; 2.新建serve ...
- 利用JavaFx开发RIA桌面应用-事件监听
1 事件监听 最近利用javaFX开发桌面客户端,碰到需要给各种UI控件添加事件监听,在这里做一个简单的小结,供日后参考. 2 分类处理 在JavaGUI 和Android中,事件通常通过实现list ...
- Android 开发中的View事件监听机制
在开发过程中,我们常常根据实际的需要绘制自己的应用组件,那么定制自己的监听事件,及相应的处理方法是必要的.我们都知道Android中,事件的监听是基于回调机制的,比如常用的OnClick事件,你了解它 ...
- digitalpersona 开发(系统托盘,监听指纹扫描)
其实很简单,主要是生成 DPFPCapture 对象时,设置他的优先级就可以了. (改成High的话,发布后,windows系统会认为你是病毒.....) C# //设置优先级,这个就是系统托盘后 ...
随机推荐
- Android之旅十八 百度地图环境搭建
在android中使用百度地图,我们能够先看看百度地图对应的SDK信息:http://developer.baidu.com/map/index.php? title=androidsdk,它里面基本 ...
- codeforce 437B The Child and Set
time limit per test 1 second memory limit per test 256 megabytes input standard input output standar ...
- mysql中DES加密解密
DES_DECRYPT(crypt_str[,key_str]) 使用DES_ENCRYPT()加密一个字符串.若出现错误,这个函数会返回 NULL. 注意,这个函数只有当MySQL在SSL 的支 ...
- MAVEN Scope使用
在Maven的依赖管理中,经常会用到依赖的scope设置.这里整理下各种scope的使用场景和说明,以及在使用中的实践心得.Scope的使用场景和说明1.compile编译范围,默认scope,在工程 ...
- Node.js中的exports与module.exports的区分
1. module应该是require方法中,上下文中的对象 2. exports对象应该是上下文中引用module.exports的新对象 3. exports.a = xxx 会将修改更新到mod ...
- JS跨域请求之JSONP
在项目开发中遇到跨域的问题,一般都是通过JSONP来解决的.但是JSONP到底是个什么东西呢,实现的原理又是什么呢.在项目的空闲时间可以好好的来研究一下了. JSONP的产生 1.众所周知,Ajax请 ...
- css单位rem---移动端至宝
1.rem是什么? rem(font size of the root element)是指相对于根元素的字体大小的单位.简单的说它就是一个相对单位.看到rem大 家一定会想起em单位em(font ...
- 函数malloc的实现源代码
/****************************************************************Copyright 1990, 1994, 2000 by AT&am ...
- js中substring和substr的用法 (转)
1.substring 方法 定义和用法 substring 方法用于提取字符串中介于两个指定下标之间的字符. 语法 stringObject.substring(start,stop) 参数 ...
- java下socket传文件
package cn.stat.p4.ipdemo; import java.io.BufferedReader; import java.io.BufferedWriter; import java ...