Javafx Smack花名册条目为空
我正在为openfire聊天客户端创建一个JavaFX应用程序。 我正在使用smack 4.1 rc1连接到服务器。 我能够连接到服务器,向其他人发送状态信息,并向其他用户发送消息。 然而,我无法反复浏览名册 当我获取花名册对象并调试它时,它会显示一个包含3个花名册条目的哈希映射,这意味着花名册正在加载到花名册对象中。然而,当我使用Javafx Smack花名册条目为空,javafx,smack,Javafx,Smack,我正在为openfire聊天客户端创建一个JavaFX应用程序。 我正在使用smack 4.1 rc1连接到服务器。 我能够连接到服务器,向其他人发送状态信息,并向其他用户发送消息。 然而,我无法反复浏览名册 当我获取花名册对象并调试它时,它会显示一个包含3个花名册条目的哈希映射,这意味着花名册正在加载到花名册对象中。然而,当我使用花名册.getentries方法将其存储到花名册条目的集合中时,它显示0对象。即使是花名册.getentriescount()方法也返回0,尽管我可以在调试视图中看到
花名册.getentries
方法将其存储到花名册条目的集合中时,它显示0对象。即使是花名册.getentriescount()
方法也返回0,尽管我可以在调试视图中看到花名册用户名
try {
config = XMPPTCPConnectionConfiguration.builder()
.setUsernameAndPassword(mUserName+ "@" + Domain, mPassword)
.setServiceName(HostName)
.setHost(HostName)
.setPort(PortName)
.setResource(Resource)
.setSecurityMode(ConnectionConfiguration.SecurityMode.disabled)
.build();
mXmppConnection = new XMPPTCPConnection(config);
mXmppConnection.connect();
mXmppConnection.login();
// Presence presence=new Presence();
Presence presence ;
if(mPresence) presence = new Presence(Presence.Type.available);
else presence = new Presence(Presence.Type.unavailable);
presence.setStatus("On Smack");
XMPPConnection conn=(XMPPConnection) mXmppConnection;
Chat chat = ChatManager.getInstanceFor(mXmppConnection).createChat
("monika@ipaddress");
chat.sendMessage("Howdy from smack!");
// Send the packet (assume we have a XMPPConnection instance called "con").
mXmppConnection.sendPacket(presence);
System.out.println("Connected successfully");
Roster roster = Roster.getInstanceFor(conn);
Collection<RosterEntry> entries = roster.getEntries();
int i=0;
for (RosterEntry entry : entries) {
System.out.println(entry);
i++;
}
System.out.println("Rosters Count - "+ i+ roster.getEntryCount());
试试看{
config=XMPPTCPConnectionConfiguration.builder()
.setUserName和密码(mUserName+“@”+域,mPassword)
.setServiceName(主机名)
.setHost(主机名)
.setPort(端口名)
.setResource(资源)
.setSecurityMode(ConnectionConfiguration.SecurityMode.disabled)
.build();
mXmppConnection=新的XMPPTCPConnection(配置);
mXmppConnection.connect();
mXmppConnection.login();
//存在=新存在();
存在;
if(mPresence)presence=新的presence(presence.Type.available);
else presence=新状态(presence.Type.unavailable);
存在。设置状态(“在Smack上”);
XMPPConnection conn=(XMPPConnection)MXMPP连接;
Chat Chat=ChatManager.getInstanceFor(mXmppConnection).createChat
("monika@ipaddress");
sendMessage(“来自smack的你好!”);
//发送数据包(假设我们有一个名为“con”的XMPPConnection实例)。
mXmppConnection.sendPacket(存在);
System.out.println(“连接成功”);
花名册=花名册.getInstanceFor(conn);
集合条目=花名册.getEntries();
int i=0;
对于(排班条目:条目){
系统输出打印项次(输入);
i++;
}
System.out.println(“花名册计数-”+i+floster.getEntryCount());
以前有人遇到过同样的问题吗?在调用getEntries之前,您可能需要检查是否加载了花名册
Roster roster = Roster.getInstanceFor(connection);
if (!roster.isLoaded())
roster.reloadAndWait();
Collection <RosterEntry> entries = roster.getEntries();
花名册=花名册.getInstanceFor(连接);
如果(!花名册.isLoaded())
花名册。重新加载并等待();
集合条目=花名册.getEntries();
谢谢您的支持
这里是完整的代码
public void getRoaster(final Callback<Collection<RosterEntry>> callback) {
final Roster roster = Roster.getInstanceFor(connection);
if (!roster.isLoaded())
try {
roster.reloadAndWait();
} catch (SmackException.NotLoggedInException | SmackException.NotConnectedException | InterruptedException e) {
e.printStackTrace();
}
Collection<RosterEntry> entries = roster.getEntries();
for (RosterEntry entry : entries) {
android.util.Log.d(AppConstant.PUBLIC_TAG, entry.getName());
}
}
public void getRoaster(最终回调){
最终花名册=花名册.getInstanceFor(连接);
如果(!花名册.isLoaded())
试一试{
花名册。重新加载并等待();
}捕获(SmackException.NotLoggeDineException | SmackException.NotConnectedException | InterruptedException e){
e、 printStackTrace();
}
集合条目=花名册.getEntries();
对于(排班条目:条目){
android.util.Log.d(AppConstant.PUBLIC_标记,entry.getName());
}
}
我刚刚解决了这个问题。我使用OpenFire作为XMPP服务器。我在花名册中的用户中检查了字段“Subscription”,它是“None”。在用“Both”更改它之后,它工作了,条目正在被提取
希望有帮助!没有看到您是如何设置连接参数的,也许这就是问题所在。不过,请查看。名册已加载,但它仍会返回0个条目。