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

一、查询所有分组

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

/**

* 获取所有组

*

* @param roster

* @return 所有组集合

*/

public static List getGroups(Roster roster) {

List grouplist = new ArrayList();

Collection rosterGroup = roster.getGroups();

Iterator 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 getEntriesByGroup(Roster roster,

String groupName) {

List Entrieslist = new ArrayList();

RosterGroup rosterGroup = roster.getGroup(groupName);

Collection rosterEntry = rosterGroup.getEntries();

Iterator i = rosterEntry.iterator();

while (i.hasNext()) {

Entrieslist.add(i.next());

}

return Entrieslist;

}

四、查询所有好友信息

很简单

/**

* 获取所有好友信息

*

* @param roster

* @return

*/

public static List getAllEntries(Roster roster) {

List Entrieslist = new ArrayList();

Collection rosterEntry = roster.getEntries();

Iterator 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 searchUsers(XMPPConnection connection,

String serverDomain, String userName) throws XMPPException {

List results = new ArrayList();

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 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", "image/jpg" + encodedImage

+ "", true);

ByteArrayInputStream bais = new ByteArrayInputStream(vcard.getAvatar());

FormatTools.getInstance().InputStream2Bitmap(bais);

vcard.save(connection);

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值