1. 用户列表

    Smack主要使用Roster进行列表管理的

    connection.getRoster();

    1. /**
    2. * 返回所有组信息 <RosterGroup>
    3. *
    4. * @return List(RosterGroup)
    5. */
    6. public static List<RosterGroup> getGroups(Roster roster) {
    7. List<RosterGroup> groupsList = new ArrayList<RosterGroup>();
    8. Collection<RosterGroup> rosterGroup = roster.getGroups();
    9. Iterator<RosterGroup> i = rosterGroup.iterator();
    10. while (i.hasNext())
    11. groupsList.add(i.next());
    12. return groupsList;
    13. }
    14. /**
    15. * 返回相应(groupName)组里的所有用户<RosterEntry>
    16. *
    17. * @return List(RosterEntry)
    18. */
    19. public static List<RosterEntry> getEntriesByGroup(Roster roster,
    20. String groupName) {
    21. List<RosterEntry> EntriesList = new ArrayList<RosterEntry>();
    22. RosterGroup rosterGroup = roster.getGroup(groupName);
    23. Collection<RosterEntry> rosterEntry = rosterGroup.getEntries();
    24. Iterator<RosterEntry> i = rosterEntry.iterator();
    25. while (i.hasNext())
    26. EntriesList.add(i.next());
    27. return EntriesList;
    28. }
    29. /**
    30. * 返回所有用户信息 <RosterEntry>
    31. *
    32. * @return List(RosterEntry)
    33. */
    34. public static List<RosterEntry> getAllEntries(Roster roster) {
    35. List<RosterEntry> EntriesList = new ArrayList<RosterEntry>();
    36. Collection<RosterEntry> rosterEntry = roster.getEntries();
    37. Iterator<RosterEntry> i = rosterEntry.iterator();
    38. while (i.hasNext())
    39. EntriesList.add(i.next());
    40. return EntriesList;
    41. }

    这里注意下,与gtalk通讯,貌似gtalk是没有分组的,汗,所以使用第三个方法直接取

    当然,还要处理,若是刚注册用户,一个组都没有的,需要默认两个组,我的好友及黑名单

    黑名单的消息,一律杀掉,不会接受处理

    1. 用户头像的获取

    使用VCard,很强大,具体自己看API吧

    可以看看VCard传回来XML的组成,含有很多信息的

    1. /**
    2. * 获取用户的vcard信息
    3. * @param connection
    4. * @param user
    5. * @return
    6. * @throws XMPPException
    7. */
    8. public static VCard getUserVCard(XMPPConnection connection, String user) throws XMPPException
    9. {
    10. VCard vcard = new VCard();
    11. vcard.load(connection, user);
    12. return vcard;
    13. }
    14. 获取头像使用
    15. /**
    16. * 获取用户头像信息
    17. */
    18. public static ImageIcon getUserImage(XMPPConnection connection, String user) {
    19. ImageIcon ic = null;
    20. try {
    21. System.out.println("获取用户头像信息: "+user);
    22. VCard vcard = new VCard();
    23. vcard.load(connection, user);
    24. if(vcard == null || vcard.getAvatar() == null)
    25. {
    26. return null;
    27. }
    28. ByteArrayInputStream bais = new ByteArrayInputStream(
    29. vcard.getAvatar());
    30. Image image = ImageIO.read(bais);
    31. ic = new ImageIcon(image);
    32. System.out.println("图片大小:"+ic.getIconHeight()+" "+ic.getIconWidth());
    33. } catch (Exception e) {
    34. e.printStackTrace();
    35. }
    36. return ic;
    37. }
    1. 组操作和用户分组操作

    主要是建立删除分组,用户添加到分组等操作

    1. /**
    2. * 添加一个组
    3. */
    4. public static boolean addGroup(Roster roster,String groupName)
    5. {
    6. try {
    7. roster.createGroup(groupName);
    8. return true;
    9. } catch (Exception e) {
    10. e.printStackTrace();
    11. return false;
    12. }
    13. }
    14. /**
    15. * 删除一个组
    16. */
    17. public static boolean removeGroup(Roster roster,String groupName)
    18. {
    19. return false;
    20. }
    21. /**
    22. * 添加一个好友  无分组
    23. */
    24. public static boolean addUser(Roster roster,String userName,String name)
    25. {
    26. try {
    27. roster.createEntry(userName, name, null);
    28. return true;
    29. } catch (Exception e) {
    30. e.printStackTrace();
    31. return false;
    32. }
    33. }
    34. /**
    35. * 添加一个好友到分组
    36. * @param roster
    37. * @param userName
    38. * @param name
    39. * @return
    40. */
    41. public static boolean addUser(Roster roster,String userName,String name,String groupName)
    42. {
    43. try {
    44. roster.createEntry(userName, name,new String[]{ groupName});
    45. return true;
    46. } catch (Exception e) {
    47. e.printStackTrace();
    48. return false;
    49. }
    50. }
    51. /**
    52. * 删除一个好友
    53. * @param roster
    54. * @param userName
    55. * @return
    56. */
    57. public static boolean removeUser(Roster roster,String userName)
    58. {
    59. try {
    60. if(userName.contains("@"))
    61. {
    62. userName = userName.split("@")[0];
    63. }
    64. RosterEntry entry = roster.getEntry(userName);
    65. System.out.println("删除好友:"+userName);
    66. System.out.println("User: "+(roster.getEntry(userName) == null));
    67. roster.removeEntry(entry);
    68. return true;
    69. } catch (Exception e) {
    70. e.printStackTrace();
    71. return false;
    72. }
    73. }
    1. 用户查询

    本来是用户操作的,分组和增删在3里讲了,这里主要是查询操作

    查询用户

    1. public static List<UserBean> searchUsers(XMPPConnection connection,String serverDomain,String userName) throws XMPPException
    2. {
    3. List<UserBean> results = new ArrayList<UserBean>();
    4. System.out.println("查询开始..............."+connection.getHost()+connection.getServiceName());
    5. UserSearchManager usm = new UserSearchManager(connection);
    6. Form searchForm = usm.getSearchForm(serverDomain);
    7. Form answerForm = searchForm.createAnswerForm();
    8. answerForm.setAnswer("Username", true);
    9. answerForm.setAnswer("search", userName);
    10. ReportedData data = usm.getSearchResults(answerForm, serverDomain);
    11. Iterator<Row> it = data.getRows();
    12. Row row = null;
    13. UserBean user = null;
    14. while(it.hasNext())
    15. {
    16. user = new UserBean();
    17. row = it.next();
    18. user.setUserName(row.getValues("Username").next().toString());
    19. user.setName(row.getValues("Name").next().toString());
    20. user.setEmail(row.getValues("Email").next().toString());
    21. System.out.println(row.getValues("Username").next());
    22. System.out.println(row.getValues("Name").next());
    23. System.out.println(row.getValues("Email").next());
    24. results.add(user);
    25. //若存在,则有返回,UserName一定非空,其他两个若是有设,一定非空
    26. }
    27. return results;
    28. }

Smack[3]用户列表,头像,组操作,用户操作的更多相关文章

  1. linux的用户管理、组管理

    用户管理:centos系统是一个多用户系统 用户分为三类: 超级用户(root) 用户id为 0 伪用户 用户id为1-499,虽然存在,但是不能用户登录 普通用户 用户id为500-60000 用户 ...

  2. Linux命令(用户管理、组和时间管理)

    用户管理    Linux系统是一个多用用户的系统 用户分为三类:      超级用户(root)用户的id是0     伪用户     用户的id是1----499,虽然存在,但不能被登录      ...

  3. Identity角色管理五(添加用户到角色组)

    因需要在用户列表中点详情按钮来到当前页,所以需要展示分组详情,并展示当前所属角色组的用户 public async Task<ActionResult> Details(string id ...

  4. CentOS 用户与群组

    目录 1.用户管理 1.1.切换用户 1.2.添加用户 1.3.删除用户 1.4.修改用户 2.群组管理 2.1.查看群组 2.2.添加群组 2.3.删除群组 2.4.修改群组 1.用户管理 Linu ...

  5. linux下添加用户到sudo组 并禁止sudo用户修改密码

    linux下添加用户到sudo组 创建用户  useradd hanli 为新用户设置密码  passwd hanli 创建用户组  groupadd  op 将用户添加到用户组  usermod - ...

  6. chmod a+w . 权限控制 su、sudo 修改文件所有者和文件所在组 添加用户到sudoer列表中 当前用户信息

    对当前目录对所有用户开放读写权限 chmod a+r . $ sudo chmod -R a+w /usr/lib/python2.7 所有用户添加文件的写权限 [linux]su.sudo.sudo ...

  7. Linux用户和组的管理操作

    用户和组的管理操作 命令中涉及的单词和简写: 用户:user:组:group : 增加:add :  修改:modify  mod ;  删除 : delete  del 增加用户     /etc/ ...

  8. linux组、用户操作相关

    Linux删除用户组和用户时常用的一些命令和参数.1.从组中删除用户编辑/etc/group 找到GROUP1那一行,删除 A或者用命令gpasswd -d A GROUP2.建用户:adduser ...

  9. linux—【用户和组的管理操作】(5)

    用户:user 组:group 增加:add 修改:modify   mod 删除:delete    del useradd     增加用户 usermod    修改用户 userdel     ...

随机推荐

  1. 约瑟夫环问题-循环链表VS数组

    2013-08-18 21:27:50 循环链表.数组解决约瑟夫环问题的比较 注意几点: 循环链表的建立不难,在删除循环链表中元素时,用pCur->next != pCur判断结束: 每一轮计数 ...

  2. Flash Media Server 5.0 (FMS)注册码

    flash media server 4.5 及最新 flash media server 5.0 注册码 防止图片打不开时: Name:tam/CORE Serial:1652-5580-8001- ...

  3. JavaScript DOM高级程序设计 4.2 事件类型--我要坚持到底!

    对象事件 load和unload(载入页面的时候调用load,关闭页面的时候调用unload) abort和error 对于载入图像时出现错误的情况,可以使用error事件侦听器来进行说明: ADS. ...

  4. Android开发之MediaPlayer和SurfaceView组成视频播放器

    SurfaceView 使用双缓冲技术 是个重量级的组件 只要不可见,就不会创建,可见时,才会创建 只要不可见,就会销毁 SurfaceView一旦不可见,就会被销毁,一旦可见,就会被创建,销毁时停止 ...

  5. HTML5学习(十)---Web Workers

    参考教程:http://www.w3school.com.cn/html5/html_5_webworkers.asp web worker 是运行在后台的 JavaScript,不会影响页面的性能. ...

  6. pyqt实践——从裸机到打包安装

    1 安装python 安装python-2.7.6.msi默认在c盘 设置环境变量,path后追加c:/python27.可以在命令行直接认识命令python 2 安装pyqt PyQt4-4.10- ...

  7. uva 489 Hangman Judge(水题)

    题目:http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&am ...

  8. Java5 并发学习

    在Java5之后,并发线程这块发生了根本的变化,最重要的莫过于新的启动.调度.管理线程的一大堆API了.在Java5以后,通过 Executor来启动线程比用Thread的start()更好.在新特征 ...

  9. LinkedBlockingQueue

    LinkedBlockingQueue是一个基于已链接节点的.范围任意的blocking queue的实现.    此队列按 FIFO(先进先出)排序元素.队列的头部 是在队列中时间最长的元素.队列的 ...

  10. 腾讯TDW:大型Hadoop集群应用[转载]

    转自:http://www.uml.org.cn/sjjm/201508103.asp  作者:Uri Margalit 来源:InfoQ 发布于:2015-8-10 TDW(Tencent dist ...