一、查询所有分组

通过Roster来获取所有分组,Roster可以通过connection.getRoster()来得到。

[java] view
plain
copy

  1. /**
  2. * 获取所有组
  3. *
  4. * @param roster
  5. * @return 所有组集合
  6. */
  7. public static List<RosterGroup> getGroups(Roster roster) {
  8. List<RosterGroup> grouplist = new ArrayList<RosterGroup>();
  9. Collection<RosterGroup> rosterGroup = roster.getGroups();
  10. Iterator<RosterGroup> i = rosterGroup.iterator();
  11. while (i.hasNext()) {
  12. grouplist.add(i.next());
  13. }
  14. return grouplist;
  15. }

二、添加分组

也一样通过roster来添加分组,groupName 为分组名。

[java] view
plain
copy

  1. /**
  2. * 添加一个分组
  3. *
  4. * @param roster
  5. * @param groupName
  6. * @return
  7. */
  8. public static boolean addGroup(Roster roster, String groupName) {
  9. try {
  10. roster.createGroup(groupName);
  11. return true;
  12. } catch (Exception e) {
  13. e.printStackTrace();
  14. return false;
  15. }
  16. }

三、查询某个组里面的所有好友


[java] view
plain
copy

  1. /**
  2. * 获取某个组里面的所有好友
  3. *
  4. * @param roster
  5. * @param groupName
  6. *            组名
  7. * @return
  8. */
  9. public static List<RosterEntry> getEntriesByGroup(Roster roster,
  10. String groupName) {
  11. List<RosterEntry> Entrieslist = new ArrayList<RosterEntry>();
  12. RosterGroup rosterGroup = roster.getGroup(groupName);
  13. Collection<RosterEntry> rosterEntry = rosterGroup.getEntries();
  14. Iterator<RosterEntry> i = rosterEntry.iterator();
  15. while (i.hasNext()) {
  16. Entrieslist.add(i.next());
  17. }
  18. return Entrieslist;
  19. }

四、查询所有好友信息

[java] view
plain
copy

  1. /**
  2. * 获取所有好友信息
  3. *
  4. * @param roster
  5. * @return
  6. */
  7. public static List<RosterEntry> getAllEntries(Roster roster) {
  8. List<RosterEntry> Entrieslist = new ArrayList<RosterEntry>();
  9. Collection<RosterEntry> rosterEntry = roster.getEntries();
  10. Iterator<RosterEntry> i = rosterEntry.iterator();
  11. while (i.hasNext()) {
  12. Entrieslist.add(i.next());
  13. }
  14. return Entrieslist;
  15. }

五、获取用户VCard信息

[java] view
plain
copy

  1. /**
  2. * 获取用户VCard信息
  3. *
  4. * @param connection
  5. * @param user
  6. * @return
  7. * @throws XMPPException
  8. */
  9. public static VCard getUserVCard(XMPPConnection connection, String user)
  10. throws XMPPException {
  11. VCard vcard = new VCard();
  12. vcard.load(connection, user);
  13. return vcard;
  14. }

六、获取用户头像信息

通过Vcard来获取用户头像信息,可以把 InputStream 转换为自己想要的类型,InputStream 转Drawable

这篇文章里可以找到  http://blog.csdn.net/h7870181/article/details/8663760

[java] view
plain
copy

  1. /**
  2. * 获取用户头像信息
  3. *
  4. * @param connection
  5. * @param user
  6. * @return
  7. */
  8. public static Drawable getUserImage(XMPPConnection connection, String user) {
  9. ByteArrayInputStream bais = null;
  10. try {
  11. VCard vcard = new VCard();
  12. // 加入这句代码,解决No VCard for
  13. ProviderManager.getInstance().addIQProvider("vCard", "vcard-temp",
  14. new org.jivesoftware.smackx.provider.VCardProvider());
  15. vcard.load(connection, user+"@"+connection.getServiceName());
  16. if (vcard == null || vcard.getAvatar() == null)
  17. return null;
  18. bais = new ByteArrayInputStream(vcard.getAvatar());
  19. } catch (Exception e) {
  20. e.printStackTrace();
  21. }
  22. if (bais == null)
  23. return null;
  24. return FormatTools.getInstance().InputStream2Drawable(bais);
  25. }

七、添加好友(有、无分组)

[java] view
plain
copy

  1. /**
  2. * 添加好友 无分组
  3. *
  4. * @param roster
  5. * @param userName
  6. * @param name
  7. * @return
  8. */
  9. public static boolean addUser(Roster roster, String userName, String name) {
  10. try {
  11. roster.createEntry(userName, name, null);
  12. return true;
  13. } catch (Exception e) {
  14. e.printStackTrace();
  15. return false;
  16. }
  17. }
  18. /**
  19. * 添加好友 有分组
  20. *
  21. * @param roster
  22. * @param userName
  23. * @param name
  24. * @param groupName
  25. * @return
  26. */
  27. public static boolean addUser(Roster roster, String userName, String name,
  28. String groupName) {
  29. try {
  30. roster.createEntry(userName, name, new String[] { groupName });
  31. return true;
  32. } catch (Exception e) {
  33. e.printStackTrace();
  34. return false;
  35. }
  36. }

八、删除好友

[java] view
plain
copy

  1. /**
  2. * 删除好友
  3. *
  4. * @param roster
  5. * @param userName
  6. * @return
  7. */
  8. public static boolean removeUser(Roster roster, String userName) {
  9. try {
  10. if (userName.contains("@")) {
  11. userName = userName.split("@")[0];
  12. }
  13. RosterEntry entry = roster.getEntry(userName);
  14. System.out.println("删除好友:" + userName);
  15. System.out.println("User." + roster.getEntry(userName) == null);
  16. roster.removeEntry(entry);
  17. return true;
  18. } catch (Exception e) {
  19. e.printStackTrace();
  20. return false;
  21. }
  22. }

九、查询用户

serverDoMain 为服务器域名

[java] view
plain
copy

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

十、修改用户头像

[java] view
plain
copy

  1. /**
  2. * 修改用户头像
  3. *
  4. * @param connection
  5. * @param f
  6. * @throws XMPPException
  7. * @throws IOException
  8. */
  9. public static void changeImage(XMPPConnection connection, File f)
  10. throws XMPPException, IOException {
  11. VCard vcard = new VCard();
  12. vcard.load(connection);
  13. byte[] bytes;
  14. bytes = getFileBytes(f);
  15. String encodedImage = StringUtils.encodeBase64(bytes);
  16. vcard.setAvatar(bytes, encodedImage);
  17. vcard.setEncodedImage(encodedImage);
  18. vcard.setField("PHOTO", "<TYPE>image/jpg</TYPE><BINVAL>" + encodedImage
  19. + "</BINVAL>", true);
  20. ByteArrayInputStream bais = new ByteArrayInputStream(vcard.getAvatar());
  21. FormatTools.getInstance().InputStream2Bitmap(bais);

openfire Android学习(二)----对分组、好友和头像等一些操作的更多相关文章

  1. openfire Android学习(六)----总结

    Xmpp的一些方法整理到一个工具类中了 XmppConnection.java [java] view plaincopy [java] view plaincopy import java.io.B ...

  2. openfire Android学习(三)----会议室创建、加入以及查询会议室中所有成员等

    openfire 中的会议室不像QQ群一样,不能保存那些离线用户,加入会议室后,一旦断开连接,就会离开会议室. 虽然如此,但如果要实现也不是不可能,我们可以自己做后台来保存,有兴趣的可以去试着实现一下 ...

  3. openfire Android学习(一)----实现用户注册、登录、修改密码和注销等

    以前学习过用Scoket 建立聊天,简单的建立聊天是没问题的,但如果要实现多人复杂的聊天,后台服务器代码就比较复杂,对于我这新手来讲就比较难了.后来在网上看到用openfire做服务器,利用强大的Sm ...

  4. Android学习二_八:Animation的使用(一) (转)

    一.Animations介绍 Animations是一个实现android UI界面动画效果的API,Animations提供了一系列的动画效果,可以进行旋转.缩放.淡入淡出等,这些效果可以应用在绝大 ...

  5. openfire Android 学习(四)----单人聊天和多人聊天(发送消息、接收消息)

    一.单人聊天 1)发送消息: 首先要获取一个聊天窗口,getConnection()为获取连接connection的方法,调用getFriendChat()获取 [java] view plainco ...

  6. Android学习二:Http操作

    1.初步认识HTTP HTTP(Hypertext Transfer Protocol超文本传输协议)是网络应用层协议,建立在TCP/IP基础上,HTTP使用可靠的TCP连接,默认端口是80. 较常用 ...

  7. android学习二(Activity)

    前面我简单的介绍了android的一些基础知识,当作热身吧,接下来接触android的四大组件的activity活动. 1.活动Activity是是一种保护用户界面的组件,主要用于和用户进行交互. 活 ...

  8. android学习二---解决ADT Buddle无法自动生成layout和res

    开发环境: 1)windows 7 64位 2)adt-bundle-windows-x86_64-20140624 3)Android Development Toolkit Version: 23 ...

  9. openfire Android学习(五)------连接断开重连

    首先要创建连接监听器,用来监听连接状态,这里我写了一个类 继承了ConnectionListener,重写了里面5个方法,最重要的两个方法connectionClosed()和connectionCl ...

随机推荐

  1. LayaAir环境TypeScript

    1.1 Node.js下载 ​ TypeScript开发HTML5需要Node.js环境,如果没有安装过的,请前往官方下载(建议LTS版本),如图1,URL地址为:https://nodejs.org ...

  2. Mybatis中接口和对应的mapper文件位置配置详解

    Mybatis中接口和对应的mapper文件位置配置详解 原链接为:https://blog.csdn.net/fanfanzk1314/article/details/71480954 今天遇到一个 ...

  3. MAC OS X 终端命令入门

    在这里记下..防止丢失 pwd 当前工作目录 cd(不加参数) 进root cd(folder) 进入文件夹 cd .. 上级目录 cd ~ 返回root cd - 返回上一个访问的目录 rm 文件名 ...

  4. day05_03 字符串格式化

    pycharm小技巧,一般情况下都需要在代码前注释以下作者以及创建日期 但是如何让软件默认生成呢? 格式化输出 可以用占位符 %s     string的缩写 #__author:Administra ...

  5. Leetcode 472.连接词

    连接词 给定一个不含重复单词的列表,编写一个程序,返回给定单词列表中所有的连接词. 连接词的定义为:一个字符串完全是由至少两个给定数组中的单词组成的. 示例: 输入: ["cat" ...

  6. aiomysql inserting operation failed !

    emotions: those days,i am using aiomysql(python3.5) to acess my database .But a 'strange' problem ma ...

  7. django demo --blog

    详情,请看虫师博客http://www.cnblogs.com/fnng/p/3737964.html 和https://my.oschina.net/matrixchan/blog/184445  ...

  8. JS进行人民币大小写转换

    //数字金额大写转换(可以处理整数,小数,负数) function upDigit() { digit=$("#digit").html(); n=digit.replace(/\ ...

  9. 九度oj 题目1007:奥运排序问题

    九度oj 题目1007:奥运排序问题   恢复 题目描述: 按要求,给国家进行排名. 输入:                        有多组数据. 第一行给出国家数N,要求排名的国家数M,国家号 ...

  10. jquery trigger

    <button id="bt1" class="layui-btn layui-btn-normal"> 点击提交 </button> ...