基于openfire+smack开发Android即时聊天应用[三]-账号信息、添加好友、JID理解等
2015-10-30 18:06
495 查看
这一篇文章主要介绍账号的属性及几个重要属性的理解,同时介绍如何添加好友,获取好友列表信息,最后介绍我对JID这个属性字段的几种理解。
欢迎访问我的个人博客:http://ittiger.cn
获取账号的所有额外属性信息
上面取出的属性集合里主要包含如下几个属性值:
上述几个属性中的name属性即为用户的昵称属性,另外用户账号名、密码是不在这些属性当中的,账号名可以理解为是JID,可以通过RosterEntry.getUser这个方法获取,关于JID的理解请看下面的介绍
我对JID的理解主要是根据我在基于smack开发即时通信聊天应用时遇到的几种情况做的一个归纳,我碰到的JID的介绍主要有三种:
1. 每个用户的好友列表中有一个JID,这个可以根据Openfire后台管理系统可以看出来,如下图:
上面图中可以清晰的看到每个好友都对应有一个JID,而在我通过addFriend(String user, String nickName, String groupName)这个方法添加好友的时候,参数用户账号user最终就变成了上面的JID,是没有包含@符号和后面的服务器名的,我称这种JID为好友JID,如管理员账号的JID为:admin。这个JID通过官方提供的接口RosterEntry.getUser是可以获取到的。
2. 好友之间聊天时有一个JID,在我创建聊天窗口对象Chat时(怎么创建请看我下一篇文章),所传的参数也是JID,但是这个JID和上面的JID的值却又不是一样的,不然会创建失败,我们来看看官方API:
官方API中很明显的指出了参数为JID,但是我如果真的出好友列表中的JID的话创建聊天对象失败,必须这样传好友JID@ServiceName ,这是第二种JID,我称为聊天JID,比如和管理员聊天时的JID为:admin@192.168.0.108
3.好友之间传输文件时又有一个JID,在创建文件传输对象时也需要传递一个参数为JID,我们也来看看官方API:
官方API中也显示了在获取文件传输对象时需要传递参数为JID,但是这个JID我给的是聊天JID的时候,根本创建不了文件传输对象,后来在网上查了半天,看到别人都在后面加了个Smack,我也试了下,结果竟然成功了,坑爹啊,反正我还没搞清楚这是为什么,格式是这样的:好友JID@ServiceNam/Smack,我称这种JID为文件传输JID,比如聊天时给管理员传文件时的JID为:admin@192.168.0.108/Smack
这就是我碰到的JID的三种使用情况
write by laohu
2015-10-30 17:58:42
欢迎访问我的个人博客:http://ittiger.cn
1.账号信息
获取账号的所有额外属性信息/** * 获取账户所有属性信息 * @return */ public Set getAccountAttributes() { if(isConnected()) { try { return AccountManager.getInstance(connection).getAccountAttributes(); } catch (Exception e) { throw new RuntimeException(e); } } throw new NullPointerException("服务器连接失败,请先连接服务器"); }
上面取出的属性集合里主要包含如下几个属性值:
上述几个属性中的name属性即为用户的昵称属性,另外用户账号名、密码是不在这些属性当中的,账号名可以理解为是JID,可以通过RosterEntry.getUser这个方法获取,关于JID的理解请看下面的介绍
2.获取当前登录用户的所有好友信息
/** * 获取当前登录用户的所有好友信息 * @return */ public Set getAllFriends() { if(isConnected()) { return Roster.getInstanceFor(connection).getEntries(); } throw new NullPointerException("服务器连接失败,请先连接服务器"); }
3.获取指定账号好友信息
/** * 获取指定账号的好友信息 * @param user 账号 * @return */ public RosterEntry getFriend(String user) { if(isConnected()) { return Roster.getInstanceFor(connection).getEntry(user); } throw new NullPointerException("服务器连接失败,请先连接服务器"); }
4.添加好友
/** * 添加好友 * @param user 用户账号 * @param nickName 用户昵称 * @param groupName 所属组名 * @return */ public boolean addFriend(String user, String nickName, String groupName) { if(isConnected()) { try { Roster.getInstanceFor(connection).createEntry(user, nickName, new String[]{groupName}); return true; } catch (NotLoggedInException | NoResponseException | XMPPErrorException | NotConnectedException e) { return false; } } throw new NullPointerException("服务器连接失败,请先连接服务器"); }
5.关于对JID的理解
我对JID的理解主要是根据我在基于smack开发即时通信聊天应用时遇到的几种情况做的一个归纳,我碰到的JID的介绍主要有三种:1. 每个用户的好友列表中有一个JID,这个可以根据Openfire后台管理系统可以看出来,如下图:
上面图中可以清晰的看到每个好友都对应有一个JID,而在我通过addFriend(String user, String nickName, String groupName)这个方法添加好友的时候,参数用户账号user最终就变成了上面的JID,是没有包含@符号和后面的服务器名的,我称这种JID为好友JID,如管理员账号的JID为:admin。这个JID通过官方提供的接口RosterEntry.getUser是可以获取到的。
2. 好友之间聊天时有一个JID,在我创建聊天窗口对象Chat时(怎么创建请看我下一篇文章),所传的参数也是JID,但是这个JID和上面的JID的值却又不是一样的,不然会创建失败,我们来看看官方API:
官方API中很明显的指出了参数为JID,但是我如果真的出好友列表中的JID的话创建聊天对象失败,必须这样传好友JID@ServiceName ,这是第二种JID,我称为聊天JID,比如和管理员聊天时的JID为:admin@192.168.0.108
3.好友之间传输文件时又有一个JID,在创建文件传输对象时也需要传递一个参数为JID,我们也来看看官方API:
官方API中也显示了在获取文件传输对象时需要传递参数为JID,但是这个JID我给的是聊天JID的时候,根本创建不了文件传输对象,后来在网上查了半天,看到别人都在后面加了个Smack,我也试了下,结果竟然成功了,坑爹啊,反正我还没搞清楚这是为什么,格式是这样的:好友JID@ServiceNam/Smack,我称这种JID为文件传输JID,比如聊天时给管理员传文件时的JID为:admin@192.168.0.108/Smack
这就是我碰到的JID的三种使用情况
write by laohu
2015-10-30 17:58:42
/** * 获取账户所有属性信息 * @return */ public Set getAccountAttributes() { if(isConnected()) { try { return AccountManager.getInstance(connection).getAccountAttributes(); } catch (Exception e) { throw new RuntimeException(e); } } throw new NullPointerException("服务器连接失败,请先连接服务器"); }
相关文章推荐
- 可以添加Footer和Header的GridView
- Android如何防止apk程序被反编译
- Android APK反编译就这么简单 详解(附图)
- 关于Android下FloatMath问题
- Android自定义折线图
- android Log图文详解(Log.v,Log.d,Log.i,Log.w,Log.e)
- AndroidStudio安装详解
- android代码混淆
- android js和webview交互
- android sdk版本版本与ADT版本不兼容的处理办法
- Android Studio如何在项目中使用jni以及OpenCV库
- Android中EditText中的InputType类型含义与如何定义
- Android Media显示的层次
- android性能优化总结
- MAC中设置android adb环境变量
- android 合并两个jar包
- android 图片和控件(ImageView)之间的关系 待解决??
- AndroidTestCase来进行android 单元测试简介
- Android自定义View的实现方法(四)
- 解决:android:editable is deprecated: Use an <EditText> to make it editable