当前位置: 代码迷 >> Android >> Android 基于XMPP Smack Openfire 对分组、密友和头像等一些操作
  详细解决方案

Android 基于XMPP Smack Openfire 对分组、密友和头像等一些操作

热度:296   发布时间:2016-04-28 07:07:33.0
Android 基于XMPP Smack Openfire 对分组、好友和头像等一些操作
下面就一起来学习一下,如何查询分组和添加分组等!

一、查询所有分组
通过Roster来获取所有分组,Roster可以通过connection.getRoster()来得到。
    /**      * 获取所有组      *       * @param roster      * @return 所有组集合      */      public static List<RosterGroup> getGroups(Roster roster) {          List<RosterGroup> grouplist = new ArrayList<RosterGroup>();          Collection<RosterGroup> rosterGroup = roster.getGroups();          Iterator<RosterGroup> i = rosterGroup.iterator();          while (i.hasNext()) {              grouplist.add(i.next());          }          return grouplist;      }

二、添加分组
也一样通过roster来添加分组,groupName 为分组名。
    /**      * 添加一个分组      *       * @param roster      * @param groupName      * @return      */      public static boolean addGroup(Roster roster, String groupName) {          try {              roster.createGroup(groupName);              return true;          } catch (Exception e) {              e.printStackTrace();              return false;          }      }

三、查询某个组里面的所有好友
很简单不解释...
    /**      * 获取某个组里面的所有好友      *       * @param roster      * @param groupName      *            组名      * @return      */      public static List<RosterEntry> getEntriesByGroup(Roster roster,              String groupName) {          List<RosterEntry> Entrieslist = new ArrayList<RosterEntry>();          RosterGroup rosterGroup = roster.getGroup(groupName);          Collection<RosterEntry> rosterEntry = rosterGroup.getEntries();          Iterator<RosterEntry> i = rosterEntry.iterator();          while (i.hasNext()) {              Entrieslist.add(i.next());          }          return Entrieslist;      }

四、查询所有好友信息
很简单
    /**      * 获取所有好友信息      *       * @param roster      * @return      */      public static List<RosterEntry> getAllEntries(Roster roster) {          List<RosterEntry> Entrieslist = new ArrayList<RosterEntry>();          Collection<RosterEntry> rosterEntry = roster.getEntries();          Iterator<RosterEntry> i = rosterEntry.iterator();          while (i.hasNext()) {              Entrieslist.add(i.next());          }          return Entrieslist;      }

五、获取用户VCard信息
    /**      * 获取用户VCard信息      *       * @param connection      * @param user      * @return      * @throws XMPPException      */      public static VCard getUserVCard(XMPPConnection connection, String user)              throws XMPPException {          VCard vcard = new VCard();          vcard.load(connection, user);          return vcard;      }

六、获取用户头像信息
通过Vcard来获取用户头像信息,可以把 InputStream 转换为自己想要的类型,InputStream 转Drawable
    /**      * 获取用户头像信息      *       * @param connection      * @param user      * @return      */      public static Drawable getUserImage(XMPPConnection connection, String user) {          ByteArrayInputStream bais = null;          try {              VCard vcard = new VCard();              // 加入这句代码,解决No VCard for              ProviderManager.getInstance().addIQProvider("vCard", "vcard-temp",                      new org.jivesoftware.smackx.provider.VCardProvider());                vcard.load(connection, user+"@"+connection.getServiceName());                if (vcard == null || vcard.getAvatar() == null)                  return null;              bais = new ByteArrayInputStream(vcard.getAvatar());            } catch (Exception e) {              e.printStackTrace();          }          if (bais == null)              return null;          return FormatTools.getInstance().InputStream2Drawable(bais);      }

七、添加好友(有、无分组)
    /**      * 添加好友 无分组      *       * @param roster      * @param userName      * @param name      * @return      */      public static boolean addUser(Roster roster, String userName, String name) {          try {              roster.createEntry(userName, name, null);              return true;          } catch (Exception e) {              e.printStackTrace();              return false;          }      }        /**      * 添加好友 有分组      *       * @param roster      * @param userName      * @param name      * @param groupName      * @return      */      public static boolean addUser(Roster roster, String userName, String name,              String groupName) {          try {              roster.createEntry(userName, name, new String[] { groupName });              return true;          } catch (Exception e) {              e.printStackTrace();              return false;          }      }

八、删除好友
    /**      * 删除好友      *       * @param roster      * @param userName      * @return      */      public static boolean removeUser(Roster roster, String userName) {          try {              if (userName.contains("@")) {                  userName = userName.split("@")[0];              }                RosterEntry entry = roster.getEntry(userName);              System.out.println("删除好友:" + userName);              System.out.println("User." + roster.getEntry(userName) == null);              roster.removeEntry(entry);                return true;          } catch (Exception e) {              e.printStackTrace();              return false;          }      }

九、查询用户
serverDoMain 为服务器域名
    /**      * 查询用户      *       * @param connection      * @param serverDomain      * @param userName      * @return      * @throws XMPPException      */      public static List<User> searchUsers(XMPPConnection connection,              String serverDomain, String userName) throws XMPPException {          List<User> results = new ArrayList<User>();          System.out.println("查询开始..............." + connection.getHost()                  + connection.getServiceName());            UserSearchManager usm = new UserSearchManager(connection);            Form searchForm = usm.getSearchForm(serverDomain);          Form answerForm = searchForm.createAnswerForm();          answerForm.setAnswer("userAccount", true);          answerForm.setAnswer("userPhote", userName);          ReportedData data = usm.getSearchResults(answerForm, serverDomain);            Iterator<Row> it = data.getRows();          Row row = null;          User user = null;          while (it.hasNext()) {              user = new User();              row = it.next();              user.setUserAccount(row.getValues("userAccount").next().toString());              user.setUserPhote(row.getValues("userPhote").next().toString());                System.out.println(row.getValues("userAccount").next());              System.out.println(row.getValues("userPhote").next());              results.add(user);              // 若存在,则有返回,UserName一定非空,其他两个若是有设,一定非空          }          return results;      }

十、修改用户头像
    /**      * 修改用户头像      *       * @param connection      * @param f      * @throws XMPPException      * @throws IOException      */      public static void changeImage(XMPPConnection connection, File f)              throws XMPPException, IOException {            VCard vcard = new VCard();          vcard.load(connection);            byte[] bytes;            bytes = getFileBytes(f);          String encodedImage = StringUtils.encodeBase64(bytes);          vcard.setAvatar(bytes, encodedImage);          vcard.setEncodedImage(encodedImage);          vcard.setField("PHOTO", "<TYPE>image/jpg</TYPE><BINVAL>" + encodedImage                  + "</BINVAL>", true);            ByteArrayInputStream bais = new ByteArrayInputStream(vcard.getAvatar());          FormatTools.getInstance().InputStream2Bitmap(bais);            vcard.save(connection);      }
  相关解决方案