使用Smack 4.1在Android中获取在线用户(花名册条目)

7
我一直在尝试使用smack 4.1 beta 2获取Android中的值班表条目。
以上链接中摘录以下引语:
“Roster现在遵循“ Manager模式”(使用Roster.instanceFor获取实例,不再使用XMPPConnection.getRoster)”
首先,我无法获取“ Roster”对象,我导入的库可能没有该包或我错过了任何库?
我正在使用上述链接中提到的所有库。 有人能帮助我使用smack 4.1获取值班表条目吗?
谢谢

我认为链接是错误的。 - Skizo-ozᴉʞS ツ
2个回答

22

这是一种逐步解决方案,最终(希望能够)回答您的问题。请特别注意第2步中的Java导入和第4步中的Roster.reloadAndWait()方法。

注意:建议使用AsyncTask执行Smack代码。

步骤1:包含以下依赖项。对于Android Studio用户,这位于build.gradle(Module:app)中。

dependencies {
    compile "org.igniterealtime.smack:smack-android:4.1.0-rc1"
    compile "org.igniterealtime.smack:smack-android-extensions:4.1.0-rc1"
    compile "org.igniterealtime.smack:smack-tcp:4.1.0-rc1" 
}

同时确保您的程序对TCP活动拥有适当的权限。对于Android Studio用户,您可以将以下内容添加到您的AndroidManifest.xml文件中:

<uses-permission android:name="android.permission.INTERNET"/>

步骤2:导入以下内容

import org.jivesoftware.smack.roster.*; /*you may have been missing this*/
import org.jivesoftware.smack.*;
import org.jivesoftware.smack.tcp.*;
import java.util.Collection; /*optional*/

步骤 3:连接服务器

/*Example solution. The exact settings would have to be adjusted outside  of practice*/
XMPPTCPConnectionConfiguration conf = XMPPTCPConnectionConfiguration
    .builder()
    .setSecurityMode(ConnectionConfiguration.SecurityMode.disabled)
    .setServiceName("192.168.2.14")
    .setHost("192.168.2.14")
    .setPort(5222)
    .setCompressionEnabled(false).build();
    XMPPTCPConnection connection = new XMPPTCPConnection(conf);

try {
    connection.connect();
    connection.login("john","123");
...

第四步:获取名册

...
Roster roster = Roster.getInstanceFor(connection);

if (!roster.isLoaded()) 
    roster.reloadAndWait();

Collection <RosterEntry> entries = roster.getEntries();

for (RosterEntry entry : entries) 
    System.out.println("Here: " + entry);

我无法获取带有在线状态的花名册。每次我都会得到空状态以及不可用的在线状态类型。 - ErShani
成功登录后,我没有获取到任何条目。 - Neo
嗨,我得到了0个条目,可能是什么问题? - Kaveesh Kanwal
这个不起作用,它总是给我0个条目。可能出了什么问题? - Kaveesh Kanwal
你需要使用roster.createEntry()向你的Roaster添加联系人条目,才能列出这些条目。否则将显示0,表示没有添加任何条目。 - Shubham AgaRwal

0
您可以像下面这样使用Smack-xxx-4.1.0-rc5
smack-android-4.1.0-rc5.jar
smack-android-extensions-4.1.0-rc5.jar
smack-core-4.1.0-rc5.jar
smack-experimental-4.1.0-rc5.jar
smack-extensions-4.1.0-rc5.jar
smack-im-4.1.0-rc5.jar
smack-resolver-minidns-4.1.0-rc5.jar
smack-sasl-provided-4.1.0-rc5.jar
smack-tcp-4.1.0-rc5.jar

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接