[Android]MUC获取服务器HostedRoom产生异常

MultiUserChat.getHostedRooms(Connection, Connection.getServiceName);产生异常:
 java.lang.ClassCastException: org.jivesoftware.smack.util.PacketParserUtils$2  at org.jivesoftware.smackx.ServiceDiscoveryManager.discoverItems

解决办法:加入providers的函数 ,因为ASmack在/META-INF缺少一个smack.providers 文件


static void registerSmackProviders() {
ProviderManager pm = ProviderManager.getInstance();
// Private Data Storage
pm.addIQProvider("query", "jabber:iq:private",
new PrivateDataManager.PrivateDataIQProvider());
// Time
try {
pm.addIQProvider("query", "jabber:iq:time",
Class.forName("org.jivesoftware.smackx.packet.Time"));
} catch (ClassNotFoundException e) {
Log.w("TestClient",
"Can't load class for org.jivesoftware.smackx.packet.Time");
}
// Roster Exchange
pm.addExtensionProvider("x", "jabber:x:roster",
new RosterExchangeProvider());
// Message Events
pm.addExtensionProvider("x", "jabber:x:event",
new MessageEventProvider());

// Chat State
pm.addExtensionProvider("active",
"http://jabber.org/protocol/chatstates",
new ChatStateExtension.Provider());
pm.addExtensionProvider("composing",
"http://jabber.org/protocol/chatstates",
new ChatStateExtension.Provider());
pm.addExtensionProvider("paused",
"http://jabber.org/protocol/chatstates",
new ChatStateExtension.Provider());
pm.addExtensionProvider("inactive",
"http://jabber.org/protocol/chatstates",
new ChatStateExtension.Provider());
pm.addExtensionProvider("gone",
"http://jabber.org/protocol/chatstates",
new ChatStateExtension.Provider());

// XHTML
pm.addExtensionProvider("html", "http://jabber.org/protocol/xhtml-im",
new XHTMLExtensionProvider());

// Group Chat Invitations
pm.addExtensionProvider("x", "jabber:x:conference",
new GroupChatInvitation.Provider());

pm.addIQProvider("query", "http://jabber.org/protocol/disco#items",
new DiscoverItemsProvider());

// add IQ handling
pm.addIQProvider("query", "http://jabber.org/protocol/disco#info",
new DiscoverInfoProvider());
	// MUC User  
pm.addExtensionProvider("x", "http://jabber.org/protocol/muc#user",
new MUCUserProvider());

// MUC Admin
pm.addIQProvider("query", "http://jabber.org/protocol/muc#admin",
new MUCAdminProvider());
// MUC Owner
pm.addIQProvider("query", "http://jabber.org/protocol/muc#owner",
new MUCOwnerProvider());

// Version
try {
pm.addIQProvider("query", "jabber:iq:version",
Class.forName("org.jivesoftware.smackx.packet.Version"));
} catch (ClassNotFoundException e) {
// Not sure what's happening here.
}

// VCard
pm.addIQProvider("vCard", "vcard-temp", new VCardProvider());

// Offline Message Requests
pm.addIQProvider("offline", "http://jabber.org/protocol/offline",
new OfflineMessageRequest.Provider());

// Offline Message Indicator
pm.addExtensionProvider("offline",
"http://jabber.org/protocol/offline",
new OfflineMessageInfo.Provider());

// Last Activity
pm.addIQProvider("query", "jabber:iq:last", new LastActivity.Provider());

// User Search
pm.addIQProvider("query", "jabber:iq:search", new UserSearch.Provider());

// SharedGroupsInfo
pm.addIQProvider("sharedgroup",
"http://www.jivesoftware.org/protocol/sharedgroup",
new SharedGroupsInfo.Provider());

// JEP-33: Extended Stanza Addressing
pm.addExtensionProvider("addresses",
"http://jabber.org/protocol/address",
new MultipleAddressesProvider());

// FileTransfer
pm.addIQProvider("si", "http://jabber.org/protocol/si",
new StreamInitiationProvider());

pm.addIQProvider("query", "http://jabber.org/protocol/bytestreams",
new BytestreamsProvider());

// add delayed delivery notifications
pm.addExtensionProvider("delay", "urn:xmpp:delay",
new DelayInfoProvider());

pm.addExtensionProvider("x", "jabber:x:delay", new DelayInfoProvider());

// add carbons and forwarding
pm.addExtensionProvider("forwarded", Forwarded.NAMESPACE,
new Forwarded.Provider());

pm.addExtensionProvider("sent", Carbon.NAMESPACE, new Carbon.Provider());

pm.addExtensionProvider("received", Carbon.NAMESPACE,
new Carbon.Provider());

// add delivery receipts
pm.addExtensionProvider(DeliveryReceipt.ELEMENT,
DeliveryReceipt.NAMESPACE, new DeliveryReceipt.Provider());

pm.addExtensionProvider(DeliveryReceiptRequest.ELEMENT,
DeliveryReceipt.NAMESPACE,
new DeliveryReceiptRequest.Provider());

// add XMPP Ping (XEP-0199)
pm.addIQProvider("ping", "urn:xmpp:ping", new PingProvider());
}


另外:在搭建openfire服务器时,出现连接不上db时,很可能是安装的数据库没有设置为“可远程访问”的权限,同时确保在数据库中建立需要用到的db。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值