读书人

smack 好友上下线头像变色有关问题

发布时间: 2013-09-05 16:02:07 作者: rapoo

smack 好友上下线头像变色问题
本帖最后由 weekendboyxw 于 2013-08-27 10:10:17 编辑 初始化好友信息的时候通过设置(friendInfo.setStatus)判断好友在线头像是亮的,不在线的好友头像是灰暗的。但是在之后监听过程中如果有好友上下线(friendInfo.setStatus)该怎么改变;

roster = con.getRoster();

groupInfo1 = new GroupInfo();
groupInfo1.setGroupName("在线好友");
groupInfo2 = new GroupInfo();
groupInfo2.setGroupName("居住社区好友");
groupInfo3 = new GroupInfo();
groupInfo3.setGroupName("其他社区好友");
groupInfo4 = new GroupInfo();
groupInfo4.setGroupName("商铺好友");
updateRoster();



/**
* 初始化用户列表
*/
public void updateRoster() throws Exception {
Collection<RosterEntry> entries = roster.getEntries();
for (RosterEntry entry : entries) {
// 根据用户名获取出席信息
Presence presence = roster.getPresence(entry.getUser());
String uname = entry.getUser().split("@")[0];
presence.getMode();
String status = presence.getStatus();
VCard vCard = getUserVCard(con, uname);
if (null != vCard.getTYPEREG()) {
// 判断用户属于那种用户类型,1 居民,2商铺,3机构
if (1 == Integer.valueOf(vCard.getTYPEREG())) {
friendInfo = new FriendInfo();
if (null != vCard.getDWELLID()) {
if (myCmmId == Integer.valueOf(vCard.getDWELLID())) {

friendInfo.setUsername(uname);
friendInfo.setVcard(vCard);
friendInfo.setStatus(status);
friendList2.add(friendInfo);
groupInfo2.setFriendInfoList(friendList2);
vCard = null;
friendInfo = null;
} else {
friendInfo.setUsername(uname);
friendInfo.setVcard(vCard);
friendInfo.setStatus(status);
friendList3.add(friendInfo);
groupInfo3.setFriendInfoList(friendList3);
vCard = null;
friendInfo = null;
}
}
} else if (2 == Integer.valueOf(vCard.getTYPEREG())) {
friendInfo = new FriendInfo();
friendInfo.setUsername(uname);
friendInfo.setVcard(vCard);
friendInfo.setStatus(status);
friendList4.add(friendInfo);
groupInfo4.setFriendInfoList(friendList4);
vCard = null;
friendInfo = null;
}
}

}
groupList.add(groupInfo2);
groupList.add(groupInfo3);
groupList.add(groupInfo4);
}

/**
* 获取用户vcard信息
*


* @param connection
* ;
* @param user
* @return vcard
* @throws XMPPException
*
* */
public static VCard getUserVCard(XMPPConnection connection, String user)
throws XMPPException {

VCard vCard = new VCard();
// 加入这句代码,解决No VCard for
ProviderManager.getInstance().addIQProvider("vCard", "vcard-temp",
new org.jivesoftware.smackx.provider.VCardProvider());
vCard.load(connection, user + "@" + NetworkParameters.SERVER_HOST);
return vCard;

}


以上是我初始化的时候获取好友信息并装入list中的代码

但是
当监听好友上下线时,我怎么样才能在广播中重新设置friendInfo.setStatus(status);
从而改变该好友的头像改变
/**
* 接收广播消息
*
* **/
private class StatusReceiver extends BroadcastReceiver {

@Override
public void onReceive(Context context, Intent intent) {
if ("status".equals(intent.getAction())) {
FriendInfo fInfo = (FriendInfo) intent.getExtras()
.getSerializable("status");
if ("离线".equals(fInfo.getStatus())) {

//需要设置的内容
} else if ("在线".equals(fInfo.getStatus())) {
//需要设置的内容

}
mHandler.sendEmptyMessage(NOTIF_UI);//刷新adapter
}
}

}

asmack
[解决办法]
这纯属java代码问题,
[解决办法]
你可以在a

引用:
我知道,这个问题该怎么办呢?

广播里面调用其它类里面的方法不会吗?

读书人网 >Android

热点推荐