0

asmack api を使用して gtalk を Android アプリケーションと統合し、ログインでき、連絡先ユーザーにメッセージを送信できますが、すべての連絡先のステータスをオンラインまたはオフラインのどちらで知りたいですか?ユーザーの可用性はオフラインであり、誰もオンラインに表示されません。実際、オンラインで、何が問題なのかを知りたがっているユーザーがいます。誰でも助けることができますか?ここに私のコードを貼り付けます:

Roster roster= connection.getRoster();
        roster.setSubscriptionMode(Roster.getDefaultSubscriptionMode());
        Collection<RosterEntry> entries = roster.getEntries();
        Presence presence2;

                for(RosterEntry entry : entries) {
                    presence2 = roster.getPresence(entry.getUser());

                    System.out.println(entry.getUser());
                    System.out.println(presence2.getType());
                   // System.out.println(presence2.getStatus());
                }

present2.getMode() も試してみましたが、null を返します。どんな助けでも大歓迎です

4

2 に答える 2

0

どの時点で名簿を取得しようとしましたか? presents2.isAvailable() を試しましたか? また、名簿リスナーを設定することをお勧めします。そうしないと、ユーザーのプレゼンスが変更されたときにリストが更新されません。

于 2012-02-29T07:44:24.403 に答える
0

これが、BuddyList クラスに対して行ったことです。gridview を buddylist クラスに渡し、このコードをスレッドで実行して、アダプターに接続されている配列を更新しました。これが数か月前のものであることは知っていますが、いつか他の誰かを助けるだろうと考えました. 新しいスレッドから updateBuddies を呼び出すようにしてください。バディリストをホストしているアクティビティからも離れるときは、必ずこのスレッドを閉じてください。乾杯。

http://i.imgur.com/4o7JLkx.png

    private void updateBuddies() {
    final Roster roster = connection.getRoster();
    roster.addRosterListener(new RosterListener() {

        @Override
        public void entriesAdded(Collection<String> arg0) {
            // TODO Auto-generated method stub

        }

        @Override
        public void entriesDeleted(Collection<String> arg0) {
            // TODO Auto-generated method stub

        }

        @Override
        public void entriesUpdated(Collection<String> arg0) {
            // TODO Auto-generated method stub

        }

        @Override
        public void presenceChanged(Presence arg0) {
            activity.runOnUiThread(new Runnable() {
                @Override
                public void run() {
                    addressA.clear();
                    nameA.clear();
                    modeA.clear();
                    availA.clear();
                    statusA.clear();
                    grid.invalidateViews();
                    Collection<RosterEntry> entries = roster.getEntries();
                    for(RosterEntry r:entries) {
                        if (r.getName() != null) {
                            String email = r.getUser();
                            String name = r.getName();
                            Presence pres = roster.getPresence(r.getUser());

                            if (pres != null) {
                                addressA.add(email);
                                nameA.add(name);
                                modeA.add(""+pres.getMode());
                                availA.add(""+pres.getType());
                                statusA.add(""+pres.getStatus());   
                            }
                        }
                    }
                    adapter.notifyDataSetChanged();
                }});
        }});
    }
于 2013-04-29T13:34:54.097 に答える