我一直试图在
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获取名册条目吗?
谢谢
解决方法
这是一个循序渐进的解决方案,通过(希望)回答您的问题得出结论.您应该特别注意STEP 2中的Java导入和STEP 4中的Roster.reloadAndWait()方法.
第1步:包括以下依赖项.对于Android Studio用户,它位于build.gradle中(模块: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"); ...
第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);