一、查询所有分组
通过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
这篇文章里可以找到 http://blog.csdn.net/h7870181/article/details/8663760
/** * 获取用户头像信息 * * @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); }