Получение статуса всех контактов Gtalk недоступно - PullRequest
0 голосов
/ 28 февраля 2012

Я использую 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());
                }

тоже пробовал сsence2.getMode (), но он возвращает ноль. любая помощь будет оценена

Ответы [ 2 ]

0 голосов
/ 29 апреля 2013

Вот что я сделал для своего класса BuddyList.Я передал свой gridview классу буддистов и запустил этот код в потоке, чтобы обновить массивы, подключенные к адаптеру.Я знаю, что это несколько месяцев, но подумал, что это поможет кому-то еще в какой-то моментПросто убедитесь, что вы вызываете 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();
                }});
        }});
    }
0 голосов
/ 29 февраля 2012

В какой момент вы пытались получить список? Вы пробовали присутствие2.isAvailable ()? Я также рекомендую установить список слушателей, иначе ваш список не будет обновляться при изменении присутствия любого пользователя.

...