我一直试图在Android中使用smack 4.1 beta 2来获取名单条目。
https://github.com/igniterealtime/Smack/wiki/Smack-4.1-Readme-and-UpgradeGuide 上面链接引用..
" Roster现在遵循Manager模式(使用Roster.instanceFor获取实例,不再使用XMPPConnection.getRoster)"
首先,我无法获得"花名册"对象,我导入的库可能没有该包,或者我在这里想念任何库?
我正在使用上面链接中提到的所有库。
任何人都可以帮助我使用smack 4.1获取名册条目吗?
由于
答案 0 :(得分:22)
这是一个循序渐进的解决方案,最后通过(希望)回答您的问题。您应特别注意STEP 2中的Java导入和STEP 4中的Roster.reloadAndWait()方法。
注意:建议使用AsyncTask执行Smack代码。
第1步:包含以下依赖项。对于Android Studio用户,它位于build.gradle(模块:应用程序)
中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");
...
第4步:获取名单
...
Roster roster = Roster.getInstanceFor(connection);
if (!roster.isLoaded())
roster.reloadAndWait();
Collection <RosterEntry> entries = roster.getEntries();
for (RosterEntry entry : entries)
System.out.println("Here: " + entry);
答案 1 :(得分: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