2015-07-10 41 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()); 

} 
相關問題