认识smack4.1.4基本对象——StanzaFilter接口
一StanzaFilte接口介绍
该接口通过定义方法过滤packet对象中的特殊属性,该接口主要用于创建packet的监听器(listener)和收集器(collector)---通过StanzaFilte对监听器和收集器需要处理的packet进行过滤,让他们去处理指定部分packet。
预先定义的几个过滤器,也就是继承了StanzaFilter接口(AbstractListFilter, AfterXStanzas, AndFilter, DelayedStanzaFilter, FlexibleStanzaTypeFilter, ForEveryMessage, ForEveryStanza, ForMatchingPredicateOrAfterXStanzas, FromMatchesFilter,IQReplyFilter, IQResultReplyFilter, IQTypeFilter, MessageTypeFilter, MessageWithBodiesFilter, MessageWithSubjectFilter, NotFilter, OnceForThisStanza, OrFilter, PacketExtensionFilter,PacketIDFilter, PacketTypeFilter, PresenceTypeFilter, SetActiveListFilter, SetDefaultListFilter, ShortcutPredicates, StanzaExtensionFilter, StanzaIdFilter, StanzaTypeFilter, ThreadFilter,ToFilter)这些预定义的过滤器可以进行逻辑组合,但是实现更为复杂的 Stanz 拦截,可以使用AndFilter 和OrFilter实现,我们也可以实现自己的Filter 但是必须实现指定接口.
二使用示例
下面的示例所创建的过滤器,就只保留指定ID的stanza。其实现方法:使用匿名内部类定义一个StanzaFilter,需要实现其accept方法,返回布尔值表示是否符合匹配条件,创建好的myFilter接口可以被用于创建PacketCollector对象,有关PacketCollector对象的介绍,参见后文。
// Use an anonymous inner class to define a stanza filter that returns
// all stanzas that have a stanza ID of "RS145".
StanzaFilter myFilter = new StanzaFilter() {
public boolean accept(Stanza stanza) {
return "RS145".equals(stanza.getStanzaId());
}
};
// Create a new stanza collector using the filter we created.
PacketCollector myCollector = connection.createPacketCollector(myFilter);
1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。