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. 【HDOJ】4322 Candy

    状态DP显然可以解,发现T了,不知道优化后能不能过.然后发现费用流可以解.trick是对need拆解成need/K, need%K两种情况讨论. /* 4312 */ #include <ios ...

  2. 【HDOJ】4122 Alice's mooncake shop

    RMQ的基础题目,简单题. /* 4122 */ #include <iostream> #include <sstream> #include <string> ...

  3. 错误代码: 1005 Can't create table 'hibernate.bill' (errno: 150)

    主要问题以及解决办法是: 1,MySQL支持外键约束,并提供与其它DB相同的功能,但表(外键表和外键主表)类型必须为 InnoDB,外键表和外键主表的类型都要是innoDB 建表约束语句: user表 ...

  4. vijos1194 Domino

    vijos上的题解: 1.因为每个格子不是被覆盖就是没被覆盖,状态只有0 1两种,m<=5,所以可以将每一列的状态压缩,看作一个二进制数.2.矩阵G表示从I状态到J状态的路径条数,自乘N次为长度 ...

  5. CQOI2011分金币&HAOI2008糖果传递

    双倍经验…… 没想到白书上竟然有……我还看过……还忘了…… 抄份题解: A1 + X1 - X2 = G A2 + X2 - X3 = G . . . An + Xn - X1 = G 解得 X1 = ...

  6. HDU 4635 Strongly connected(强连通分量,变形)

    题意:给出一个有向图(不一定连通),问最多可添加多少条边而该图仍然没有强连通. 思路: 强连通分量必须先求出,每个强连通分量包含有几个点也需要知道,每个点只会属于1个强连通分量. 在使图不强连通的前提 ...

  7. (八)学习MVC之三级联动

    1.新建项目,MVC选择基本模板 2.新建类:Model/Student.cs,数据库信息有三个实体:分别是年级.班级和学生. using System; using System.Collectio ...

  8. POJ 1001 Exponentiation

    题意:求c的n次幂……要求保留所有小数…… 解法:一开始只知道有BigInteger……java大数+模拟.第一次写java大数……各种报错各种exception……ORZ 没有前导0和小数后面的补位 ...

  9. [Bhatia.Matrix Analysis.Solutions to Exercises and Problems]ExI.4.5

    Suppose it is known that $\scrM$ is an invariant subspace for $A$. What invariant subspaces for $A\o ...

  10. visual studio 2012 update3

    http://www.microsoft.com/zh-cn/download/confirmation.aspx?id=39305