XMPP连接到服务器“ok”,但提前搜索不起作用

时间:2013-04-01 14:00:39

标签: android xmpp

我正在使用XMPP服务器创建聊天应用程序。一切都很好,我可以和其他人聊天。但现在,我想显示XMPP服务器的所有用户名。所以我正在使用“UserSearchManager”类。

我看到我能够登录用户并可以聊天。但我收到错误“service-unavailable(503)”。

这是我的代码: -

String host = "115.xxx.xxx.xxx";
    String port = "5222";
    String service = "115.xxx.xxx.xxx";
    String username = "rawat";
    String password = "rawat"; 

    // Create a connection
    ConnectionConfiguration connConfig =
            new ConnectionConfiguration(host, Integer.parseInt(port),service);
    connConfig.setSASLAuthenticationEnabled(true);
    connection = new XMPPConnection(connConfig);

    try {
       connection.connect();

        Log.i("XMPPClient", "[SettingsDialog] Connected to " + connection.getHost());
    } catch (XMPPException ex) {
        Log.e("XMPPClient", "[SettingsDialog] Failed to connect to " + connection.getHost());
        Log.e("XMPPClient", ex.toString());
        xmppClient.setConnection(null);
    }
    try {
        UserSearchManager search = new UserSearchManager(connection);  
        connection.login(username, password);
        Log.i("XMPPClient", "Logged in as " + connection.getUser());

        // Set the status to available
        Presence presence = new Presence(Presence.Type.available);
        connection.sendPacket(presence);
        xmppClient.setConnection(connection);

        Form searchForm = search.getSearchForm("search."+connection.getServiceName());

        Form answerForm = searchForm.createAnswerForm();  
        answerForm.setAnswer("Username", true);  

        answerForm.setAnswer("search", "test");  

        org.jivesoftware.smackx.ReportedData data = search.getSearchResults(answerForm,"search."+connection.getServiceName()); 
        System.out.println("data are "+data);

----这一行---

     Form searchForm = 
search.getSearchForm("search."+connection.getServiceName());  

给我Null指针异常。

请高手看看。谢谢你的时间安排。

1 个答案:

答案 0 :(得分:0)

在您的活动中使用以下代码&在登录连接之前,请按以下方式调用 configure(ProviderManager.getInstance());

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

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