2012-02-28 3 views
0

asmack API를 사용하여 gtalk를 내 안드로이드 응용 프로그램과 통합 할 수 있습니다. 로그인 할 수 있고, 내 연락처 사용자에게 messasges를 보낼 수 있지만 온라인 또는 오프라인 상태인지, 명단을 사용했지만 모든 사용자의 가용성이 오프라인인지 아무도 온라인에 나타나지 않습니다. 실제로 온라인에있는 일부 사용자가 있으며, 잘못된 점을 알고 싶습니다. 누구든지 도와 줄 수 있습니까? 내 코드를 여기에 붙여 넣으십시오 :모든 Gtalk 연락처 상태를 사용할 수 없음

too2Please2.getMode()도 시도했지만 null을 반환합니다. 어떤 도움을 주시면 감사하겠습니다.

답변

0

어떤 시점에서 명단을 얻으려고 했습니까? presence2.isAvailable()을 시도 했습니까? 또한 명단 청취자를 설정하는 것이 좋습니다. 그렇지 않으면 모든 사용자의 현재 상태가 변경 될 때 목록이 업데이트되지 않습니다.

+0

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

그래, 내가 –

+0

그때 내가 더 많은 코드없이 일이 무엇인지 확실히 말할 수 없어이 모든 것을 시도했다. 나는 기본적으로 비슷한 것을했고 나는 모든 사용자의 존재감을 얻는다. 온라인으로 오프라인 상태가되었을 때 사용자의 존재를 업데이트 할 수있었습니다. – CChi

0

다음은 BuddyList 클래스에 대한 것입니다. buddylist 클래스에 gridview를 전달하고 스레드에이 코드를 실행하여 어댑터에 연결된 배열을 업데이트했습니다. 나는 이것이 몇 달 전인 것을 알고 있지만 누군가 다른 사람을 돕는 것이라고 생각했다. 새 스레드에서 updateBuddies를 호출했는지 확인하십시오. buddylist를 호스팅하는 활동을 떠날 때이 스레드를 닫는 것을 처리하도록하십시오. 건배.

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(); 
       }}); 
     }}); 
    } 
관련 문제