2011-01-12 20 views
9

Tôi có thể nhận người dùng trực tuyến trong danh sách bạn bè của mình qua API Smack không? Có thể không?Tôi có thể đưa người dùng trực tuyến vào danh sách bạn bè của tôi qua Smack không?

Tôi đang làm việc trên ứng dụng có trò chuyện giữa những người dùng. Tôi đã tạo thành công ví dụ ứng dụng chat chỉ cần nhập tên của bạn bè và gửi trò chuyện, nhưng bây giờ tôi muốn danh sách bạn bè trực tuyến.

Trả lời

20
Roster roster = xmppConnection.getRoster(); 
Collection<RosterEntry> entries = roster.getEntries(); 
Presence presence; 

for(RosterEntry entry : entries) { 
    presence = roster.getPresence(entry.getUser()); 

    System.out.println(entry.getUser()); 
    System.out.println(presence.getType().name()); 
    System.out.println(presence.getStatus()); 
} 
+1

Cảm ơn, nhưng tôi có thể xác định trạng thái trực tuyến hoặc ngoại tuyến bạn có thể xóa điều này không? –

+1

Tôi đã làm cùng một mã nhưng mỗi người dùng chỉ đơn giản là cung cấp cho sự hiện diện "không có sẵn" làm thế nào nó có thể được khi có 4-5 đã có sẵn, nhưng hiển thị cho tôi tất cả là không có ai có thể giúp tôi về điều đó? –

+2

Tương tự tại đây. Tôi chỉ nhận được trạng thái không có sẵn:/ –

1

Sử dụng phương thức presence.getMode() để nhận Chế độ người dùng. Chế độ là enum và giá trị của nó có thể được trò chuyện, có sẵn, đi, xa, dnd.

4
Presence presence = roster.getPresence("[email protected]"); 
if (presence.getType() == Presence.Type.AVAILABLE) { 
    // Tom is online... 
} 

tham khảo từ this link

+0

tôi cần hỏi vài câu về xmpp, tôi có thể đưa bạn bè danh sách của tôi vào danh sách xem bây giờ tôi muốn chỉ hiển thị người dùng trực tuyến trong một listview cách nào bạn sẽ hướng dẫn tôi –

+0

nó hoạt động trên lollipop android? –

5
XMPPConnection.addConnectionCreationListener(new ConnectionCreationListener() { 

     @Override 
     public void connectionCreated(Connection arg0) { 
      Log.i(TAG, "receive xmpp connection : " + arg0); 
      connection = arg0; 
      roster = arg0.getRoster(); 

      Collection<RosterEntry> entries = roster.getEntries(); 
      Presence presence; 

      Log.e(TAG, "user count" + entries.size()); 

      for (RosterEntry entry : entries) { 
       presence = roster.getPresence(entry.getUser()); 

       Log.i(TAG, "" + entry.getUser()); 
       Log.i(TAG, "" + presence.getType().name()); 
       Log.i(TAG, "" + presence.getStatus()); 
      } 

     } 
    }); 

Vì vậy, khi bắt đầu chương trình của bạn đăng ký mà XMPPConnection người nghe, thường mất vài giây để nhận đối tượng kết nối. Nhưng nó sẽ chỉ hoạt động nếu bạn sẽ sử dụng creatEntry chỉ trong trường hợp đó con gà trống sẽ thấy những người dùng tạo ra.

Để tạo entry sử dụng Roster sử dụng mã tiếp theo:

try { 
    rooster.createEntry("name", "user_id", null); 
} catch (XMPPException e) { 
    e.printStackTrace(); 
} 

Tôi không sử dụng bất kỳ nhóm, và với thành công thấy người dùng trên thiết bị thứ hai.

1
smackAndroid = SmackAndroid.init(this); 
XMPPConnection.addConnectionCreationListener(new ConnectionCreationListener() { 

    @Override 
    public void connectionCreated(XMPPConnection connection) { 

      Log.i("hello", "receive xmpp connection : " + connection); 
      roster = connection.getRoster(); 

      try { 
       roster.createEntry("2868254", "hello", null); 
      } catch (XMPPException e) { 
       e.printStackTrace(); 
      } catch (NotLoggedInException e) { 
       // TODO Auto-generated catch block 
       e.printStackTrace(); 
      } catch (NoResponseException e) { 
       // TODO Auto-generated catch block 
       e.printStackTrace(); 
      } catch (NotConnectedException e) { 
       // TODO Auto-generated catch block 
       e.printStackTrace(); 
      } 
     } 
}); 
+0

phía trên mã của tôi không truy xuất được người dùng trực tuyến –

+0

Bạn có thể thêm một số giải thích cho điều này không? – apaul

Các vấn đề liên quan