基于tigase服务器的安卓客户端开发---创建聊天
2016-04-04 16:48
405 查看
注册登录完成了,接下来咱们就要进入聊天功能的研发了,是不是很激动?
使用jaxmpp创建聊天与注册登陆一样简单
第一步,创建聊天对象,打开聊天通道
嗯,就是一句话
遇到的问题:上篇文章已经说过,用户名必须拼接"@"+服务器名! 所以,这里的toaccount同样需要拼接
这一点至关重要,如果聊天通道出错,那么,后面的激情聊天化为泡影,又想起了当时苦逼的周末,悲哀,略去一万字....
言归正传,消息通道已经建立好了,双方都已经是服务器的用户了,那么我们要他们建立联络,想想openFire的实现方式:加好友,发消息;但是,tigase是不需要加好友的,也就是说,我可以随意跟服务器上的注册用户聊天,前提是必须在同一个"@"的服务器里,收发消息的方法也是很简单的,而且是否收发成功,也都融入进来,是的,还是监听:
好了,消息可以正常收发了,会有同学发现,第一次成功收发,第二次偶尔成功,接着也许就收发不到了,为什么?这也许是tigase的设计机制,针对这个问题,不要着急,一句话,对,还是一句话就可以解决
使用jaxmpp创建聊天与注册登陆一样简单
第一步,创建聊天对象,打开聊天通道
private void creatChat() { try { UrlConstant.jaxmpp.createChat(JID.jidInstance(toaccount)); L.e("asker", "创建聊天对象:" + toaccount); } catch (JaxmppException e) { e.printStackTrace(); Log.e("asker", "创建聊天的异常:" + e.getMessage()); }
嗯,就是一句话
遇到的问题:上篇文章已经说过,用户名必须拼接"@"+服务器名! 所以,这里的toaccount同样需要拼接
这一点至关重要,如果聊天通道出错,那么,后面的激情聊天化为泡影,又想起了当时苦逼的周末,悲哀,略去一万字....
言归正传,消息通道已经建立好了,双方都已经是服务器的用户了,那么我们要他们建立联络,想想openFire的实现方式:加好友,发消息;但是,tigase是不需要加好友的,也就是说,我可以随意跟服务器上的注册用户聊天,前提是必须在同一个"@"的服务器里,收发消息的方法也是很简单的,而且是否收发成功,也都融入进来,是的,还是监听:
if (UrlConstant.jaxmpp != null) { //发送消息的监听 UrlConstant.jaxmpp.addListener(SocketConnector.StanzaSending, new Listener<SocketConnector .ConnectorEvent>() { @Override public void handleEvent(SocketConnector.ConnectorEvent connectorEvent) { try { L.e("asker", "发送的消息:" + connectorEvent.getSessionObject().getUserBareJid() .getLocalpart() + "<<<<" + connectorEvent.getStanza().getAsString() + ">>>>"); } catch (XMLException e) { e.printStackTrace(); }
//接收消息的监听 UrlConstant.jaxmpp.addListener(SocketConnector.StanzaReceived, new Listener<SocketConnector .ConnectorEvent>() { @Override public void handleEvent(SocketConnector.ConnectorEvent connectorEvent) throws JaxmppException { L.e("asker", "接收到的消息:" + connectorEvent.getSessionObject().getUserBareJid() .getLocalpart() + "<<<<" + connectorEvent.getStanza().getAsString() + ">>>>"); L.e("asker", "toaccount::" + toaccount + ";;" + connectorEvent.getStanza().getAttribute("from") .split("@")[0]);
好了,消息可以正常收发了,会有同学发现,第一次成功收发,第二次偶尔成功,接着也许就收发不到了,为什么?这也许是tigase的设计机制,针对这个问题,不要着急,一句话,对,还是一句话就可以解决
try { UrlConstant.jaxmpp.keepalive(); } catch (JaxmppException e) { e.printStackTrace(); }
相关文章推荐
- OpenCV HOG
- 定义一个泛型方法
- String StringBuilder StringBuffer
- netty通信的tls部分
- 【April Fools Day Contest 2016G】【2种语言实现】You're a Professional
- svn命令
- THUThesis配置
- hdoj 1433 Simply Syntax【模拟】
- 用线性列表求并集
- 泛型的定义与使用
- 主键生成策略
- HTML-embed标签详解
- PHP数据库操作:从MySQL原生API到PDO
- 【April Fools Day Contest 2016F】【脑洞 or 二分OEIS】Ace It!
- hdoj 1432 Lining Up
- 泛型的上限
- 指定多个泛型类型
- ORACLE 全备份脚本
- Offer题9 斐波那契数列&青蛙跳台&矩形覆盖
- jar9