Android基于XMPP Smack Openfire下学习开发IM(二)对分组、好友和

下面就一起来学习一下,如何查询分组和添加分组等!

一、查询所有分组

通过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 forProviderManager.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);}

路灯和我之间,究竟谁是谁的过客,

Android基于XMPP Smack Openfire下学习开发IM(二)对分组、好友和

相关文章:

你感兴趣的文章:

标签云: