2012-02-28 4 views
0

Я использую asmack api для интеграции gtalk с моим приложением android. Я могу войти в систему, могу отправлять messasges моему контактному пользователю, но я хочу знать статус всех контактов, будь он онлайн или офлайн, Я использовал список, чтобы узнать его, но показывая, что доступность всех пользователей отключена, никто не появляется в Интернете, где на самом деле есть некоторые пользователи, которые находятся в сети, хотят знать, что происходит не так. может ли кто-нибудь помочь? вставляя свой код ниже здесь:Получение статуса всех контактов Gtalk

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()); 
       } 

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

ответ

0

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

+0

да, я попытался все эти вещами –

+0

то я не могу сказать точно, что произойдет без дополнительного кода. Я в основном делал что-то подобное, и я получаю присутствие всех пользователей. также смог обновить присутствие пользователя, когда он выйдет в автономном режиме – CChi

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(); 
       }}); 
     }}); 
    } 
Смежные вопросы