我正在开发一个聊天应用程序。我需要使用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);