???? 最近用asmack做一个android的手机客户端(openfire做服务器),操蛋啊,一开始connect服务器都失败,这个再PC端运行得好好的,一到手机端就卡住了,泪奔啊。
??? 后来发现要在c盘sysytem32文件夹的driver文件夹的host文件修改域名映射,终于connect上服务器了,心里好高兴了一阵子。靠,才发现,悲剧才刚刚开始,后来出现chat.addMessageListener(...)接收不到消息,阻塞不通,心想:完了完了,消息都监听不了。上网查了好久好久(不记得有多久了),终于发现“还有”一个消息的方法,又兴奋了好一阵子。
?消息监听代码实现:
// 监听消息接收 XmppConn.connection.addPacketListener(new PacketListener() { public void processPacket(Packet packet) { Message message = (Message) packet; System.out.println("收到消息" + message.toXML());},null);
要问为什么addMessagelistener不管用,实话说,我也不知道,网上说这是asmack的一个bug。
?
好了有了这个方法,实现一对一聊天的基本功能就足够了。
OK,这个手机端不能这么锉吧,然后就添加多人聊天功能,也就是会议吧,这个网上资料多的是,基本都是下面的代码的样子:
MultiUserChat.addInvitationListener(connection, new InvitationListener() { public void invitationReceived(Connection conn, String room, String inviter, String reason, String password, Message message) { MultiUserChat multiUserChat = new MultiUserChat(conn, room); System.out.println("收到来自 " + inviter + " 的聊天室邀请。邀请附带内容:" + reason); }}
?原来我就是这么实现的,而且在PC端运行时畅通无阻啊,但是到了android这边,这个想法就太天真了,我发现程序直接把这段代码忽视了,哎这可怎么办?思前想后,还是用addPacketListener的方式来搞吧,直接导致的结果是:苦力啊~~自己写方法来把接收到的信息解析出来,这里面的工作量~~你懂的。
??? 至今我还留着这个疑问:为什么许多监听都无效?而且真的是网上说的asmack的bug?为什么android不允许预读取asmack里面的一个叫META-INF里面的文件?
??? 发到博客频道上,更希望有谁能帮一下忙解释甚至解决这些问题,感激不尽。
// 创建聊天室,进入房间后的nickname
try {
muc.join(account);
} catch (XMPPException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
ChatPacketListener chatListener = new ChatPacketListener(muc);
muc.addMessageListener(chatListener);
你还在做android的xmpp开发吗?加我qq:601831754,一起讨论吧。