2014-07-01 4 views
0

xmpp와 asmack을 사용하여 채팅 응용 프로그램을 만들고 싶지만 문제가 있습니다. 서버의 모든 사용자를 확보 할 수 없습니다. 먼저 연결 한 다음 로그인하여 사용자를 검색하려고 시도했지만 항상 빈 Collection을 얻습니다.roster.getEntities() 항상 null을 반환합니다. aSmack android

public void connect() { 

    final ProgressDialog dialog = ProgressDialog.show(this, 
      "Connecting...", "Please wait...", false); 

    Thread t = new Thread(new Runnable() { 

     @Override 
     public void run() { 
      // Create a connection 
      ConnectionConfiguration connConfig = new ConnectionConfiguration(
        HOST, PORT, SERVICE); 
      XMPPConnection connection = new XMPPConnection(connConfig); 

      try { 
       connection.connect(); 
       Log.i("XMPPChatDemoActivity", 
         "Connected to " + connection.getHost()); 
      } catch (XMPPException ex) { 
       Log.e("XMPPChatDemoActivity", "Failed to connect to " 
         + connection.getHost()); 
       Log.e("XMPPChatDemoActivity", ex.toString()); 
       setConnection(null); 
      } 
      try { 
       // SASLAuthentication.supportSASLMechanism("PLAIN", 0); 
       connection.login(USERNAME, PASSWORD); 
       Log.i("XMPPChatDemoActivity", 
         "Logged in as " + connection.getUser()); 

       // Set the status to available 
       Presence presence = new Presence(Presence.Type.available); 
       connection.sendPacket(presence); 
       setConnection(connection); 

       // here in roster i always get null. 

       Collection<RosterEntry> roster = connection.getRoster() 
         .getEntries(); 

       for (RosterEntry entry : roster) { 
        Log.d("XMPPChatDemoActivity", 
          "--------------------------------------"); 
        Log.d("XMPPChatDemoActivity", "RosterEntry " + entry); 
        Log.d("XMPPChatDemoActivity", 
          "User: " + entry.getUser()); 
        Log.d("XMPPChatDemoActivity", 
          "Name: " + entry.getName()); 
        Log.d("XMPPChatDemoActivity", 
          "Status: " + entry.getStatus()); 
        Log.d("XMPPChatDemoActivity", 
          "Type: " + entry.getType()); 


       } 
      } catch (XMPPException ex) { 
       Log.e("XMPPChatDemoActivity", "Failed to log in as " 
         + USERNAME); 
       Log.e("XMPPChatDemoActivity", ex.toString()); 
       setConnection(null); 
      } 

      dialog.dismiss(); 
     } 
    }); 
    t.start(); 
    dialog.show(); 
} 
+0

사용중인 aSmack의 버전은 무엇입니까? – Flow

+0

asmack-2010.07.07 –

+0

예, 글쎄, 그건 4 살짜리 버전과 같습니다. aSmack 4.0.0을 사용해보십시오. – Flow

답변

0

로스터를 얻으려면 등록 정보라는 플러그인을 검색하거나 사전 설치되어있는 경우 사용자 섹션에서 검색하십시오.

그런 다음 그룹에 새 사용자를 자동으로 추가 사용을 선택하십시오. 또한 맨 아래에 새로운 기본 그룹을 작성하여 새 사용자가 작성 될 때 자동으로이 기본 그룹에 추가됩니다.

그런 다음 동일한 코드를 실행하면 xmpp 프로토콜 기반 서버에있는 모든 사용자가 표시됩니다.

관련 문제