openfire Android学习(二)----对分组、好友和头像等一些操作
一、查询所有分组
通过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);
openfire Android学习(二)----对分组、好友和头像等一些操作的更多相关文章
- openfire Android学习(六)----总结
Xmpp的一些方法整理到一个工具类中了 XmppConnection.java [java] view plaincopy [java] view plaincopy import java.io.B ...
- openfire Android学习(三)----会议室创建、加入以及查询会议室中所有成员等
openfire 中的会议室不像QQ群一样,不能保存那些离线用户,加入会议室后,一旦断开连接,就会离开会议室. 虽然如此,但如果要实现也不是不可能,我们可以自己做后台来保存,有兴趣的可以去试着实现一下 ...
- openfire Android学习(一)----实现用户注册、登录、修改密码和注销等
以前学习过用Scoket 建立聊天,简单的建立聊天是没问题的,但如果要实现多人复杂的聊天,后台服务器代码就比较复杂,对于我这新手来讲就比较难了.后来在网上看到用openfire做服务器,利用强大的Sm ...
- Android学习二_八:Animation的使用(一) (转)
一.Animations介绍 Animations是一个实现android UI界面动画效果的API,Animations提供了一系列的动画效果,可以进行旋转.缩放.淡入淡出等,这些效果可以应用在绝大 ...
- openfire Android 学习(四)----单人聊天和多人聊天(发送消息、接收消息)
一.单人聊天 1)发送消息: 首先要获取一个聊天窗口,getConnection()为获取连接connection的方法,调用getFriendChat()获取 [java] view plainco ...
- Android学习二:Http操作
1.初步认识HTTP HTTP(Hypertext Transfer Protocol超文本传输协议)是网络应用层协议,建立在TCP/IP基础上,HTTP使用可靠的TCP连接,默认端口是80. 较常用 ...
- android学习二(Activity)
前面我简单的介绍了android的一些基础知识,当作热身吧,接下来接触android的四大组件的activity活动. 1.活动Activity是是一种保护用户界面的组件,主要用于和用户进行交互. 活 ...
- android学习二---解决ADT Buddle无法自动生成layout和res
开发环境: 1)windows 7 64位 2)adt-bundle-windows-x86_64-20140624 3)Android Development Toolkit Version: 23 ...
- openfire Android学习(五)------连接断开重连
首先要创建连接监听器,用来监听连接状态,这里我写了一个类 继承了ConnectionListener,重写了里面5个方法,最重要的两个方法connectionClosed()和connectionCl ...
随机推荐
- Linux操作系统启动流程
一般来说,所有的操作系统的启动流程基本就是: 总的来说,linux系统启动流程可以简单总结为以下几步:1)开机BIOS自检,加载硬盘.2)读取MBR,进行MBR引导.3)grub引导菜单(Boot L ...
- Linux学习-Linux的账号与群组
使用者识别码: UID 与 GID Linux 主机并不会直接认识 你的"帐号名称"的,他仅认识 ID 啊 (ID 就是一组号码啦). 由于计算机仅认识 0 与 1,所 以主机对于 ...
- TTL与COMS的区别
1.电平的上限和下限定义不一样,CMOS具有更大的抗噪区域. 同是5伏供电的话,ttl一般是1.7V和3.5V的样子,CMOS一般是 2.2V,2.9V的样子,不准确,仅供参考. 2.电流驱动能力不 ...
- WPF触控程序开发(二)——整理的一些问题
上一篇(WPF触控程序开发)介绍了几个比较不错的资源,比较基础.等到自己真正使用它们时,问题就来了,现把我遇到的几个问题罗列下,大家如有遇到其他问题或者有什么好的方法还望赐教. 问题1.如何获取触控点 ...
- 【瓜分5000元奖金】Wannafly挑战赛13
链接:https://www.nowcoder.com/acm/contest/80/A来源:牛客网 zzy的小号 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 262144K,其他 ...
- 深度理解STL之map、set
课程设计做了这个一直没有整理(搬运 set算是关键字和相同的特殊map set应该更加被强调理解为“集合”,而集合所涉及的操作并.交.差等,即STL提供的如交集set_intersection().并 ...
- thinkphp文件上传以及图片处理
文件上传 上传表单 在ThinkPHP中使用上传功能无需进行特别处理.例如,下面是一个带有附件上传的表单提交: <form action="__URL__/upload" e ...
- C#拆箱和装箱成本
从原理上可以看出,装箱时,生成的是全新的引用对象,这会有时间损耗,也就是造成效率降低. 文章:.Net常见面试题整理(2)——装箱和拆箱 装箱,产生新的引用对象,并且赋值,然后引用. 拆箱,往往跟随着 ...
- ZOJ-3953 Intervals,t
Intervals 题意:给出n个区间,求最少删除多少个区间使得任意三个区间都不相交. 思路:按区间左端点排序,每次选取r最大的两个与当前比较,如果能放更新r,否则删除r最大的.关键就在怎么删除r最大 ...
- 解决11g r2,12c使用wm_concat报错问题
创建type CREATE OR REPLACE TYPE zh_concat_im AUTHID CURRENT_USER AS OBJECT ( CURR_STR ), STATIC FUNCTI ...
