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

时间:2012-03-05 10:50:06

标签: android

我正在开发聊天应用程序。我需要使用XMPP在Android应用程序中显示朋友列表。有人可以指导我如何做到这一点。任何示例都对我很有用。

我开发了以下代码。

 public void friendslist()
    {
    Roster roster = connection.getRoster();
    Collection<RosterEntry> entries = roster.getEntries();

    System.out.println("\n\n" + entries.size() + " buddy(ies):");
    for(RosterEntry r:entries)
    {
    System.out.println(r.getUser());
    }
    }

我需要在列表视图中显示所有联系人。我怎么能实现它。如果我能得到可以解决我问题的答案,我将很高兴。

提前致谢。

3 个答案:

答案 0 :(得分:2)

您可以创建名为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;
}

现在您的名单中有好友列表,因此您必须使用自定义列表适配器实现它。而已。 谢谢。

答案 1 :(得分:0)

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

答案 2 :(得分:0)

使用AsynTask获取下面的名单列表代码对我来说工作正常。

 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);