Android中基于XMPP协议实现IM聊天程序与多人聊天室

2019-12-10 18:59:56于丽

上面有两张Spark客户端的聊天室列表占有者一列不同的原因:当使用以下代码获取时不能获取occupantsCount和subject的值:  

System.out.println(roomInfo.getOccupantsCount() + " : " + roomInfo.getSubject()); 

这是由于Openfire端有个bug(暂且这样说吧,我不知为什么Openfire这样做).首先修改Smack的一个bug,修改RoomInfo类的RoomInfo(DiscoverInfo info) 方法:         

Iterator<String> values = form.getField("muc#roominfo_subject").getValues(); 
if (values.hasNext()) { 
  this.subject = values.next(); 
} 
else { 
  this.subject = ""; 
} 
 

改为:   

final FormField subjField = form.getField("muc#roominfo_subject");  
this.subject = subjField == null ? "" : subjField.getValues().next(); 

  修改Openfire的源码,org/jivesoftware/openfire/muc/spi/MultiUserChatServiceImpl类的public DataForm getExtendedInfo(String name, String node, JID senderJID) 方法:         

      /*final FormField fieldOcc = dataForm.addField(); */ 
      fieldSubj.setVariable("muc#roominfo_occupants"); 
      fieldSubj.setLabel(LocaleUtils.getLocalizedString("muc.extended.info.occupants")); 
      fieldSubj.addValue(Integer.toString(room.getOccupantsCount()));