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 时产生错误的主要内容,如果未能解决你的问题,请参考以下文章

12C新特性 -- 共享asm口令文件

Oracle DB 管理ASM实例

翻译自mos文章使用asmcmd命令在本地和远程 asm 实例之间 拷贝asm file的方法

精准化测试看ASM在Android中的强势插入-ASM

精准化测试看ASM在Android中的强势插入-ASM

如何在 asm 中使用 MOV?