from.createForm() 在使用 asmack for android 时产生错误
Posted
技术标签:
【中文标题】from.createForm() 在使用 asmack for android 时产生错误【英文标题】:from.createForm() produce error while using asmack for android 【发布时间】:2013-02-15 12:33:13 【问题描述】:我正在使用 asmack 在我的应用程序中聊天。 运行以下代码时出现错误。
mXmppConnection=connectionToXmppServer(HOST, PORT, SERVICE, mUserName, mPassword);
/*creating new chat room*/
MultiUserChat muc = new MultiUserChat(mXmppConnection, "DestinationCountry@conference.domainname");
try
/*to create chat room*/
/*sending configration to server*/
muc.join(mUserName);
Form form = muc.getConfigurationForm();
Form answerForm = form.createAnswerForm();
answerForm.setAnswer("muc#roomconfig_persistentroom", true);
muc.sendConfigurationForm(answerForm);
/*muc.sendConfigurationForm(new Form(Form.TYPE_SUBMIT));*/
/* muc.join("jack");*/
muc.sendMessage("i just joined the room");
Log.i("room name", muc.getRoom());
muc.addMessageListener(new PacketListener()
@Override
public void processPacket(Packet packet)
Message mess = (Message) packet;
Log.i("msg ",mess.getFrom() + ": " + mess.getBody());
);
catch (XMPPException e)
Toast.makeText(getApplicationContext(), "test room failed",
Toast.LENGTH_SHORT).show();
以下是我遇到的错误
02-15 17:54:28.409: E/androidRuntime(24400): at java.lang.Thread.run(Thread.java:856)
02-15 17:54:28.409: E/AndroidRuntime(24400): Caused by: java.lang.NullPointerException
02-15 17:54:28.409: E/AndroidRuntime(24400): at com.example.groupchat.GroupChat$ConnectTOChatServer.doInBackground(GroupChat.java:174)
02-15 17:54:28.409: E/AndroidRuntime(24400): at com.example.groupchat.GroupChat$ConnectTOChatServer.doInBackground(GroupChat.java:1)
02-15 17:54:28.409: E/AndroidRuntime(24400): at android.os.AsyncTask$2.call(AsyncTask.java:287)
02-15 17:54:28.409: E/AndroidRuntime(24400): at java.util.concurrent.FutureTask.run(FutureTask.java:234)
【问题讨论】:
@GroupChat.java:174 会发生什么?那就是抛出 NPE 检查这个问题和答案,它会解决你的问题..***.com/a/15787396/964741 【参考方案1】:在创建 Muc 之前或登录之后调用此函数。
public void configure(ProviderManager pm)
// 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());
// Service Discovery # Items
pm.addIQProvider("query", "http://jabber.org/protocol/disco#items",
new DiscoverItemsProvider());
// Service Discovery # Info
pm.addIQProvider("query", "http://jabber.org/protocol/disco#info",
new DiscoverInfoProvider());
// Data Forms
pm.addExtensionProvider("x", "jabber:x:data", new DataFormProvider());
// 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());
// Delayed Delivery
pm.addExtensionProvider("x", "jabber:x:delay",
new DelayInformationProvider());
// 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 org.jivesoftware.smackx.bytestreams.socks5.provider.BytestreamsProvider());
// Privacy
pm.addIQProvider("query", "jabber:iq:privacy", new PrivacyProvider());
pm.addIQProvider("command", "http://jabber.org/protocol/commands",
new AdHocCommandDataProvider());
pm.addExtensionProvider("malformed-action",
"http://jabber.org/protocol/commands",
new AdHocCommandDataProvider.MalformedActionError());
pm.addExtensionProvider("bad-locale",
"http://jabber.org/protocol/commands",
new AdHocCommandDataProvider.BadLocaleError());
pm.addExtensionProvider("bad-payload",
"http://jabber.org/protocol/commands",
new AdHocCommandDataProvider.BadPayloadError());
pm.addExtensionProvider("bad-sessionid",
"http://jabber.org/protocol/commands",
new AdHocCommandDataProvider.BadSessionIDError());
pm.addExtensionProvider("session-expired",
"http://jabber.org/protocol/commands",
new AdHocCommandDataProvider.SessionExpiredError());
【讨论】:
以上是关于from.createForm() 在使用 asmack for android 时产生错误的主要内容,如果未能解决你的问题,请参考以下文章