roster.getPresence 给出不可用
roster.getPresence gives unavailable
我正在使用 smack api。
Presence presencePacket = new Presence(Presence.Type.subscribe);
presencePacket.setTo("dhmohn@example.com");
conn1.sendPacket(presencePacket);
Roster.setDefaultSubscriptionMode(Roster.SubscriptionMode.accept_all);
Roster roster=conn1.getRoster();
Collection<RosterEntry> entries = roster.getEntries();
for (RosterEntry entry : entries) {
System.out.println(roster.getPresence(entry.getUser()));
}
在上面的代码中 roster.getPresence(entry.getUser())
给出状态 unavailable
此外,我还有以下疑问:
- 此处
dhmohn@example.com
是用户名为 danmorgan
的用户的电子邮件 ID。我使用的 jid 正确吗?
- 如果上面的jid是错误的,那么正确的jid是什么?顺便说一句,我也尝试了以下 jid:
danmorgan@saint-pc
.
请注意,在 openfire 服务器 上,我已将两个用户的订阅模式设置为。
Presence presence = new Presence(Presence.Type.available);
connection.sendPacket(存在);
Roster roster = connection.getRoster();
roster.addRosterListener(new RosterListener() {
@Override
public void presenceChanged(Presence presence) {
// TODO Auto-generated method stub
String user = presence.getFrom();
// Presence bestPresence = roster.getPresence(user);
Log.e("User Presence--------->****-->",
"User Name-----" + user
+ "Online or Offline ---->"
+ presence.isAvailable());
}
@Override
public void entriesUpdated(Collection<String> arg0) {
// TODO Auto-generated method stub
}
@Override
public void entriesDeleted(Collection<String> arg0) {
// TODO Auto-generated method stub
}
@Override
public void entriesAdded(Collection<String> arg0) {
// TODO Auto-generated method stub
}
});
在这里,您可以在状态发生变化时获取用户状态更新。
JID是必不可少的一部分
始终使用 JID 登录。 JID 是 username 和 server name 的组合。
所以,在我的例子中,JID 将是 username@server-name 即 dhmohn@saint-pc 因为 username 是 dhmohn 和 服务器名称 是 saint-pc.
请注意,如果您使用以下代码登录,那么您的名册将始终为空:
conn1.login("dhmohn", "Dhmohn123");
而是始终使用 jabber ID 登录:
conn1.login("dhmohn@saint-pc", "Dhmohn123");
登录后,让线程休眠 10 秒。稍后获取花名册。
可以在 Openfire 的管理控制台中找到 服务器名称:
server tab ->server manager->server informaton->server properties
我正在使用 smack api。
Presence presencePacket = new Presence(Presence.Type.subscribe);
presencePacket.setTo("dhmohn@example.com");
conn1.sendPacket(presencePacket);
Roster.setDefaultSubscriptionMode(Roster.SubscriptionMode.accept_all);
Roster roster=conn1.getRoster();
Collection<RosterEntry> entries = roster.getEntries();
for (RosterEntry entry : entries) {
System.out.println(roster.getPresence(entry.getUser()));
}
在上面的代码中 roster.getPresence(entry.getUser())
给出状态 unavailable
此外,我还有以下疑问:
- 此处
dhmohn@example.com
是用户名为danmorgan
的用户的电子邮件 ID。我使用的 jid 正确吗? - 如果上面的jid是错误的,那么正确的jid是什么?顺便说一句,我也尝试了以下 jid:
danmorgan@saint-pc
.
请注意,在 openfire 服务器 上,我已将两个用户的订阅模式设置为。
Presence presence = new Presence(Presence.Type.available); connection.sendPacket(存在);
Roster roster = connection.getRoster();
roster.addRosterListener(new RosterListener() {
@Override
public void presenceChanged(Presence presence) {
// TODO Auto-generated method stub
String user = presence.getFrom();
// Presence bestPresence = roster.getPresence(user);
Log.e("User Presence--------->****-->",
"User Name-----" + user
+ "Online or Offline ---->"
+ presence.isAvailable());
}
@Override
public void entriesUpdated(Collection<String> arg0) {
// TODO Auto-generated method stub
}
@Override
public void entriesDeleted(Collection<String> arg0) {
// TODO Auto-generated method stub
}
@Override
public void entriesAdded(Collection<String> arg0) {
// TODO Auto-generated method stub
}
});
在这里,您可以在状态发生变化时获取用户状态更新。
JID是必不可少的一部分
始终使用 JID 登录。 JID 是 username 和 server name 的组合。 所以,在我的例子中,JID 将是 username@server-name 即 dhmohn@saint-pc 因为 username 是 dhmohn 和 服务器名称 是 saint-pc.
请注意,如果您使用以下代码登录,那么您的名册将始终为空:
conn1.login("dhmohn", "Dhmohn123");
而是始终使用 jabber ID 登录:
conn1.login("dhmohn@saint-pc", "Dhmohn123");
登录后,让线程休眠 10 秒。稍后获取花名册。
可以在 Openfire 的管理控制台中找到 服务器名称:
server tab ->server manager->server informaton->server properties