当前位置: 代码迷 >> Android >> Android基于XMPP Smack Openfire放学习开发IM(二)对分组、好友和头像等一些操作
  详细解决方案

Android基于XMPP Smack Openfire放学习开发IM(二)对分组、好友和头像等一些操作

热度:165   发布时间:2016-05-01 11:03:08.0
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 

这篇文章里可以找到  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);	}





  相关解决方案