使用XMPP在android应用程序中显示好友列表



我正在开发一个聊天应用程序。我需要使用XMPP在android应用程序中显示朋友列表。有人能指导我怎么做吗。任何示例对我都很有用。

我已经开发了以下代码。

 public void friendslist()
    {
    Roster roster = connection.getRoster();
    Collection<RosterEntry> entries = roster.getEntries();
    System.out.println("nn" + entries.size() + " buddy(ies):");
    for(RosterEntry r:entries)
    {
    System.out.println(r.getUser());
    }
    }

我需要在列表视图中显示我的所有联系人。如果我能得到能解决我问题的答案,我会很高兴的。

提前谢谢。

假设您创建一个名为BuddyInfo的模型类,其中包含name、first_name、last_name、jid、email等字段。

public List<BuddyInfo> getFriendList() {
    Collection<RosterEntry> entries = roster.getEntries();
    mContactList = new ArrayList<BuddyInfo>();
    BuddyInfo buddyInfo = null;
    for (RosterEntry entry : entries) {
            String buddy = entry.getUser();
            buddyInfo = new BuddyInfo();
            System.out.println(entry.getUser().trim());         
            VCard vCard = new VCard();
        try {
            vCard.load(mConnection, buddy);
        } catch (XMPPException e) {
            e.printStackTrace();
        }
        String buddyName = vCard.getFirstName();    
        buddyInfo.setUserName(buddyName);
        .
        .
        .
        .
        // like that you can access all the fields that you require from vcard object.
        mContactList.add(buddyInfo);
    }
       return mContactList;
}

现在,您已经从花名册中获得了好友列表,所以您必须使用自定义列表适配器来实现它。就是这样。非常感谢。

Smack,适用于Android(Ignite Realtime开发的Openfire)。据我所知,它通常是最常用的Android XMPP库。

使用AsynTask获取下面的Roster列表代码对我来说很好。

 new AsyncTask<Void, Void, Boolean>() {
        @Override
        protected Boolean doInBackground(Void... params) {
            Roster roster = Roster.getInstanceFor(xmpptcpConnection);
            Collection<RosterEntry> entries = roster.getEntries();
            Log.d("Roster","buddy size :: " + entries.size());
            for(RosterEntry rosterEntry : entries){
                Log.d("Roster","Name is : " + rosterEntry);
            }
            return null;
        }
        @Override
        protected void onPostExecute(Boolean result) {
            super.onPostExecute(result);
        }
    }.execute((Void[]) null);

最新更新