2015-07-10 142 views
0

我正在使用smack.jar库。 我曾尝试使用Android的XMPP通过这个代码来实现群聊:“没有响应从服务器”异常在群组聊天中使用smack android

MultiUserChat muc = new MultiUserChat(connection,groupName+"@"+Utils.SERVER_NAME); 
    muc.create("nickname1"); 

    Form form = muc.getConfigurationForm(); 
    Form submitForm = form.createAnswerForm(); 
    for (Iterator fields = form.getFields();fields.hasNext();){ 
     FormField field = (FormField) fields.next(); 
     if(!FormField.TYPE_HIDDEN.equals(field.getType()) && field.getVariable()!= null){ 
      submitForm.setDefaultAnswer(field.getVariable()); 
     } 
    }    
    submitForm.setAnswer("muc#roomconfig_publicroom", true); 
    muc.sendConfigurationForm(submitForm); 
    muc.join("nickname1"); 

变得异常,如“从服务器没有响应”。有谁知道如何解决它?

+0

Utils.SERVER_NAME的价值是什么? –

+0

openfire服务器的IP地址/主机名。 –

+0

我通过用asmack.jar替换smack.jar文件并将SmackAndroid.init()放置在代码的开头,找到了解决方案。 –

回答

1

我有同样的问题,因为我使用域名chat.localhost。确保我们有conference作为子域multiUserManager.getMultUserChat("[email protected]");

而且为IQ和PacketExtension目的使用ProviderManager也很重要。

public static 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 BytestreamsProvider()); 

    pm.addIQProvider("open", "http://jabber.org/protocol/ibb", 
      new IBBProviders.Open()); 

    pm.addIQProvider("close", "http://jabber.org/protocol/ibb", 
      new IBBProviders.Close()); 

    pm.addExtensionProvider("data", "http://jabber.org/protocol/ibb", 
      new IBBProviders.Data()); 

    // 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()); 

} 
相关问题