Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/svg/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何从客户端知道XMPP服务器中是否存在帐户?_Java_Xmpp_Smack - Fatal编程技术网

Java 如何从客户端知道XMPP服务器中是否存在帐户?

Java 如何从客户端知道XMPP服务器中是否存在帐户?,java,xmpp,smack,Java,Xmpp,Smack,我正在使用Smack库开发一个IM应用程序,我面临一些问题 我想知道是否可以通过服务器中的用户名检查用户是否存在。我的应用程序必须检查系统联系人列表中的人是否在我的服务器中打开了帐户,并且他们不在朋友列表中 到目前为止,我成功地将系统联系人列表中的每个联系人添加到我用户的服务器联系人列表中,即使他们事先没有帐户,但这不是我要寻找的 下面是代码(Contact就像Smack的RosterEntry的包装器类): 如果有帮助,我目前正在使用Openfire作为服务器。您可以使用类搜索特定用户,如果在

我正在使用Smack库开发一个IM应用程序,我面临一些问题

我想知道是否可以通过服务器中的用户名检查用户是否存在。我的应用程序必须检查系统联系人列表中的人是否在我的服务器中打开了帐户,并且他们不在朋友列表中

到目前为止,我成功地将系统联系人列表中的每个联系人添加到我用户的服务器联系人列表中,即使他们事先没有帐户,但这不是我要寻找的

下面是代码(Contact就像Smack的RosterEntry的包装器类):


如果有帮助,我目前正在使用Openfire作为服务器。

您可以使用类搜索特定用户,如果在服务器上找不到用户,则可以假定该用户未在服务器上注册。

您可以尝试以下代码段来搜索用户:

public Boolean checkIfUserExists(String user) throws XMPPException{
    UserSearchManager search = new UserSearchManager(xmppConnection);  
    Form searchForm = search.getSearchForm("search."+xmppConnection.getServiceName());
    Form answerForm = searchForm.createAnswerForm();  
    answerForm.setAnswer("Username", true);  
    answerForm.setAnswer("search", user);  
    ReportedData data = search.getSearchResults(answerForm,"search."+xmppConnection.getServiceName());  
    if (data.getRows() != null) {
        Iterator<Row> it = data.getRows();
        while (it.hasNext()) {
            Row row = it.next();
            Iterator iterator = row.getValues("jid");
            if (iterator.hasNext()) {
                String value = iterator.next().toString();
                System.out.println("Iteartor values...... " + value);
            }
        }
        return true;
    }
    return false;
}
public Boolean checkIfUserExists(字符串用户)抛出XMPPException{
UserSearchManager search=新的UserSearchManager(xmppConnection);
表单searchForm=search.getSearchForm(“search.+xmppConnection.getServiceName());
Form answerForm=searchForm.createAnswerForm();
answerForm.setAnswer(“用户名”,true);
answerForm.setAnswer(“搜索”,用户);
ReportedData data=search.getSearchResults(回答“search.”+xmppConnection.getServiceName());
if(data.getRows()!=null){
迭代器it=data.getRows();
while(it.hasNext()){
Row=it.next();
迭代器迭代器=row.getValues(“jid”);
if(iterator.hasNext()){
字符串值=迭代器.next().toString();
System.out.println(“Iteartor值…”+值);
}
}
返回true;
}
返回false;
}

一个注意事项-此方法有一个限制,即只能用于授权会话。因此,如果您尝试使用id可用性检查实现自注册,则需要另一种方法。
public Boolean checkIfUserExists(String user) throws XMPPException{
    UserSearchManager search = new UserSearchManager(xmppConnection);  
    Form searchForm = search.getSearchForm("search."+xmppConnection.getServiceName());
    Form answerForm = searchForm.createAnswerForm();  
    answerForm.setAnswer("Username", true);  
    answerForm.setAnswer("search", user);  
    ReportedData data = search.getSearchResults(answerForm,"search."+xmppConnection.getServiceName());  
    if (data.getRows() != null) {
        Iterator<Row> it = data.getRows();
        while (it.hasNext()) {
            Row row = it.next();
            Iterator iterator = row.getValues("jid");
            if (iterator.hasNext()) {
                String value = iterator.next().toString();
                System.out.println("Iteartor values...... " + value);
            }
        }
        return true;
    }
    return false;
}