您的位置:首页 > 移动开发 > Android开发

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

2015-01-26 17:10 363 查看
下面就一起来学习一下,如何查询分组和添加分组等!


一、查询所有分组

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

[java] view
plaincopyprint?

<span style="white-space:pre"> </span>/**

* 获取所有组

*

* @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 为分组名。

[java] view
plaincopyprint?

<span style="white-space:pre"> </span>/**

* 添加一个分组

*

* @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;

}

}


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

很简单不解释...

[java] view
plaincopyprint?

<span style="white-space:pre"> </span>/**

* 获取某个组里面的所有好友

*

* @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;

}


四、查询所有好友信息

很简单

[java] view
plaincopyprint?

<span style="white-space:pre"> </span>/**

* 获取所有好友信息

*

* @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信息

[java] view
plaincopyprint?

<span style="white-space:pre"> </span>/**

* 获取用户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

这篇文章里可以找到 /article/2727308.html

[java] view
plaincopyprint?

<span style="white-space:pre"> </span>/**

* 获取用户头像信息

*

* @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);

}


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

[java] view
plaincopyprint?

<span style="white-space:pre"> </span>/**

* 添加好友 无分组

*

* @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;

}

}


八、删除好友

[java] view
plaincopyprint?

<span style="white-space:pre"> </span>/**

* 删除好友

*

* @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 为服务器域名

[java] view
plaincopyprint?

<span style="white-space:pre"> </span>/**

* 查询用户

*

* @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;

}


十、修改用户头像

[java] view
plaincopyprint?

<span style="white-space:pre"> </span>/**

* 修改用户头像

*

* @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);

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐