2

実際に、smack API を使用して IM サービス (Google チャットを継承) をプログラミングしています。しかし、バディ リストとそのプレゼンスを印刷したい場合、コンパイル モードではすべてのプレゼンスが利用できないと表示されますが、デバッグ モードでは実際の利用可能性が表示されます。

私のコードは...

1-接続を作成する

public boolean openConnection() {
    ConnectionConfiguration connectionConfiguration = new ConnectionConfiguration("talk.google.com", 5222, "mail.google.com");
    this.connection = new XMPPConnection(connectionConfiguration);
    try {
        this.connection.connect();
    } catch (XMPPException e) {
        // TODO: Send Error Information To Programmer's Email Address
    }
    if(this.connection.isConnected()) {
        this.roster = this.connection.getRoster();
        this.roster.addRosterListener(new RosterListener() {
            public void entriesAdded(Collection<String> addresses) {}
            public void entriesDeleted(Collection<String> addresses) {}
            public void entriesUpdated(Collection<String> addresses) {}
            public void presenceChanged(Presence presence) {}
        });
        return true;
    }
    return false;
}

2-ログイン

public boolean login(String jid, String password) {
    try { 
        this.connection.login(jid, password, "smack");
    } catch (XMPPException e) {
        // TODO: Send Error Information To Programmer's Email Address
    }
    if(this.connection.isAuthenticated()) return true;
    return false;
}

3-バディリスト

public void buddiesList() {
    Collection<RosterEntry> rosterEntries = this.roster.getEntries();
    for(RosterEntry rosterEntry: rosterEntries) {
        System.out.println(rosterEntry.username() + " === " + this.roster.getPresence(rosterEntry.getUser()));
    }
}

4-実装

public static void main(String args[]) {
    IMService imService = new IMService();
    imService.openConnection();
    imService.login("google account", "password");
    imService.buddiesList();
}
4

2 に答える 2

1

あなたの RosterListener は何もしません。これは、プレゼンス メッセージなどを受信したときに名簿を更新するコードを配置する必要がある場所です。

取得しているプレゼンスは、作成時の状態のスナップショットです。状態を最新に保つには、実際に RosterListener をコーディングする必要があります。これは、getPresence()メソッドの Javadoc に明確に記載されています。

于 2012-06-27T13:20:46.733 に答える
0

名簿にリスナーを追加すると、より良い可能性があります。

https://www.igniterealtime.org/builds/smack/docs/latest/documentation/extensions/rosterexchange.html

于 2015-07-20T14:59:16.657 に答える