2012-02-28 96 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(),但它返回null。 任何幫助將不勝感激

回答

0

你在什麼時候嘗試獲得名冊?你有沒有嘗試presence2.isAvailable()?我還建議設置一個名單偵聽器,否則,當任何用戶的狀態發生變化時,您的列表將不會更新。

+0

是的,我想這一切事情 – 2012-02-29 08:17:17

+0

然後我不能肯定地告訴什麼發生沒有更多的代碼。我基本上做了類似的事情,我得到了所有用戶的存在。也能夠在脫機聯機時更新用戶的存在 – CChi 2012-02-29 08:33:35

0

這是我爲我的BuddyList類做的。我將我的gridview傳遞給buddylist類,並在線程中運行此代碼以更新連接到適配器的陣列。我知道這已經過去了幾個月,但認爲它會在某些時候幫助別人。只要確保你從一個新線程調用updateBuddies。請務必在離開主持buddylist的活動時處理關閉此線程。乾杯。

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(); 
       }}); 
     }}); 
    } 
相關問題