我正在尝试创建聊天应用。 - 我在本地机器上安装了openfire服务器 - 并通过openfire服务器管理面板添加了一些用户 - 现在我想在android Emulator中显示所有可用的用户。 - 我能够连接到openfire服务器使用aSmack lib。但是在connection.getRoster();。
上得到错误 ConnectionConfiguration config = new ConnectionConfiguration("10.42.0.3", 5222, "localhost");
connection = new XMPPConnection(config);
try {
connection.connect();
Log.d("SMACK ", " CONNECTED");
// list online contacts
Roster roster = connection.getRoster();
Collection<RosterEntry> entries = roster.getEntries();
Log.d("TRACE", "entries.size()=" + entries.size());
for (RosterEntry e : entries) {
Log.d("PRESENCE", e.getUser() + "=" + roster.getPresence(e.getUser()).isAvailable());
if (roster.getPresence(e.getUser()).isAvailable()) {
Log.d("ADD", "NAME_KEY=" + e.getName() + " USERJID_KEY=" + e.getUser());
//contacts.add(contact);
}
}
}
catch (XMPPException e){
Log.e("XMPPChatDemoActivity", "Failed to connect to "+ connection.getHost());
Log.e("XMPPChatDemoActivity", e.toString());
}
此代码在此行上给出错误 connection.getRoster(); 没找到。
我在这里 依赖
compile fileTree(dir: 'libs', include: ['*.jar'])
compile 'com.android.support:appcompat-v7:22.2.1'
compile 'com.android.support:design:22.2.1'
compile 'com.google.android.gms:play-services:8.3.0'
compile "org.igniterealtime.smack:smack-java7:4.1.0"
// Optional for XMPPTCPConnection
compile "org.igniterealtime.smack:smack-tcp:4.1.0"
// Optional for XMPP-IM (RFC 6121) support (Roster, Threaded Chats, …)
compile "org.igniterealtime.smack:smack-im:4.1.0"
// Optional for XMPP extensions support
compile "org.igniterealtime.smack:smack-extensions:4.1.0"
答案 0 :(得分:1)
Smack没有这样的功能。但是您可以使用REST API获取用户列表。 为此,请在插件存储库中安装服务器端的rest api插件。然后在客户端添加rest api client,
Maven:
<dependency>
<groupId>org.igniterealtime</groupId>
<artifactId>rest-api-client</artifactId>
<version>1.1.3</version>
</dependency>
Gradle:
compile 'org.igniterealtime:rest-api-client:1.1.3'
示例:
AuthenticationToken token = new AuthenticationToken("rest_api_token");
RestApiClient client = new RestApiClient("host", port, token);
UserEntities entities = client.getUsers(); // UserEntities have all users list including admin.
**您将在服务器的rest api部分获得rest api token。
答案 1 :(得分:0)
您无法从名册中获取服务器上的所有注册用户,因为名单不同。名单就像个人用户的地址簿一样,所以将会有人加入名册或从名册中删除。
如果用户未添加到名单中,则您的XMPPClient无法访问其他用户详细信息。此外,由于名册就像个人通讯录,所以名册通常对特定用户jid有不同的缺口,而不是他/她在服务器上注册的名字。
简而言之,您需要通过http / rest apis访问它。 你可以在你的openfire管理控制台上启用rest api,你可以在android端使用这个rest api客户端。 - https://github.com/xibsked/Openfire-Rest-Api-Client-Android
有一个应用已经在使用这个api,就像一个Openfire管理控制台 - https://play.google.com/store/apps/details?id=com.sked.ofadmin
实施非常简单 -
OfApiClient.with(this).account(account).getUser("admin",
new Listener<User>() {
@Override
public void onResponse(Object mTag, User user) {
//Handle Success
}
},
new ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
//Handle Failure
}
});