2014-07-10 52 views
1

我使用ejabberd作爲XMPP服務器和aSmack APIaSmack多用戶房間創建錯誤

在Android中創建一個聊天的多用戶聊天我使用下面的代碼

public boolean createGroup(XMPPConnection connection, String groupName) { 
     /* 
     * if (connection == null) return false; try { 
     * connection.getRoster().createGroup(groupName); 
     * Log.v("Group created : ", groupName); return true; } catch (Exception 
     * e) { e.printStackTrace(); return false; } 
     */ 
     if (getConnection() == null) { 
      try { 
       connect(); 
      } catch (XMPPException e) { 
       // TODO Auto-generated catch block 
       e.printStackTrace(); 
      } 
     } 
     //configure(ProviderManager.getInstance()); 
     SmackAndroid.init(getApplicationContext()); 
     MultiUserChat muc = new MultiUserChat(getConnection(), 
       "[email protected]"); 

     try { 
      muc.create("chitchat"); 
      Form form = muc.getConfigurationForm(); 
      Form submitForm = form.createAnswerForm(); 
      for (Iterator<FormField> fields = form.getFields(); fields.hasNext();) { 
       FormField field = (FormField) fields.next(); 
       if (!FormField.TYPE_HIDDEN.equals(field.getType()) 
         && field.getVariable() != null) { 
        submitForm.setDefaultAnswer(field.getVariable()); 
       } 
      } 
      List<String> owners = new ArrayList<String>(); 
      // Log.i(TAG, "list of owners=====" +owners.toString()); 
      owners.add("akash"); 
      submitForm.setAnswer("muc#roomconfig_roomowners", owners); 
      muc.sendConfigurationForm(submitForm); 
     } catch (XMPPException e) { 
      e.printStackTrace(); 
     } 

     return true; 
    } 

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

但我得到以下錯誤

07-10 23:18:07.733:E/AndroidRuntime(707):java.lang.IllegalArgumentException異常:致找不到一個字段中指定的變量。 07-10 23:18:07.733:E/AndroidRuntime(707):在org.jivesoftware.smackx.Form.setAnswer(Form.java:326) 07-10 23:18:07.733:E/AndroidRuntime(707) :at com.akash.locationaware.XMPPChatDemoActivity.createGroup(XMPPChatDemoActivity.java:308) 07-10 23:18:07.733:E/AndroidRuntime(707):at com.akash.locationaware.MessageActivity.sendMessage(MessageActivity.java: 90) 07-10 23:18:07.733:E/AndroidRuntime(707):... 14更多

我無法理解我錯過了什麼以及此消息的含義。

回答

1

問題是因爲下面的代碼行

submitForm.setAnswer("muc#roomconfig_roomowners", owners); 

刪除它得到了我的房間的創建工作中。

+2

但它是可用的表單域http://xmpp.org/registrar/formtypes.html ... – Suvitruf