Smack Roster获取不到名册

来源:互联网 发布:魔眼软件 编辑:程序博客网 时间:2024/04/30 12:53

最近搞OpenFire,一直在摸索一个XMPP协议的java lib: smack
今天遇到一个很蛋疼的问题,记录一下。
Roster用来获取名册的类,但是按照文档里面那么写,获取到的Roster永远为空。

/** * Created by Mario on 2016/11/25 0025. * Roster demo */public class SmackRosterDemo {    public static void main(String[] args) throws IOException, XMPPException, SmackException, InterruptedException {        SmackConfiguration.DEBUG = true;        XMPPTCPConnectionConfiguration.Builder configBuilder = XMPPTCPConnectionConfiguration.builder();        configBuilder.setServiceName("mario");        configBuilder.setUsernameAndPassword("mario", "123.com");        configBuilder.setResource("Spark");        configBuilder.setSecurityMode(ConnectionConfiguration.SecurityMode.disabled);        XMPPTCPConnection connection = new XMPPTCPConnection(configBuilder.build());        connection.connect();        connection.login();        System.out.println(connection.isAuthenticated());        Roster roster = Roster.getInstanceFor(connection);        Collection<RosterEntry> entries = roster.getEntries();        entries.forEach(System.out::println);        Thread.sleep(1000000);        connection.disconnect();    }}

这是我的代码,entries.forEach(System.out::println);不会有任何的输出。这让我郁闷了一天,调试着玩的时候,偶然输出了一次名单,多次试验发现了一个奇怪的事情····

.......        connection.login();        System.out.println(connection.isAuthenticated());        Thread.sleep(100);//看这里!!!        Roster roster = Roster.getInstanceFor(connection);        Collection<RosterEntry> entries = roster.getEntries();        entries.forEach(System.out::println);.......

connection.login()之后,sleep一下,就可以获取到名册了。
这是输出:

trueluigi: luigi@mario [Friends]

坑真多啊,有哪个大神知道原因,求告诉~

0 0
原创粉丝点击