我正在开发聊天应用程序。我需要使用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());
}
}
我需要在列表视图中显示所有联系人。我怎么能实现它。如果我能得到可以解决我问题的答案,我将很高兴。
提前致谢。
答案 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);