APPID:cHLIl5Lm8XymK8wncBCzEdLM-gzGzoHsz
步骤:1.对方修改名字后发给我一条消息,同时更新对话的自定义名字属性
2.我在接受消息的onMessage方法里面拿到的conversation先fetch之后再通过conversation.get()获取对方的名字
关键代码:
1.接受消息后的操作
@Override
public void onMessage(AVIMMessage message, final AVIMConversation conversation, AVIMClient client) {
conversation.fetchInfoInBackground(new AVIMConversationCallback() {
@Override
public void done(AVIMException e) {
HashMap<String, HashMap<String, String>> map = CommonUtils.getAttributes(conversation);
if (map.get("show").get(MainApp.user.getId()) == null || map.get("show").get(MainApp.user.getId()).equals("0")) {
map.get("show").put(MainApp.user.getId(), "1");
CommonUtils.updateAttributes(conversation, map);
conversation.updateInfoInBackground(new AVIMConversationCallback() {
@Override
public void done(AVIMException e) {
if (e == null) {
refresh(conversation);
} else {
}
}
});
} else {
refresh(conversation);
}
}
});
2.刷新对话列表(对话列表需要显示对方名字、头像、最新消息、时间)
boolean isContains = false;
for (int i = 0; i < conversationList.size(); i++) {
if (conversationList.get(i).getConversationId().equals(event.getAVIMConversation().getConversationId())) {
conversationList.remove(i);
conversationList.add(0, event.getAVIMConversation());
isContains = true;
inquiryListAdapter.notifyDataSetChanged();
break;
}
}
if (!isContains) {
conversationList.add(0, event.getAVIMConversation());
inquiryListAdapter.notifyDataSetChanged();
}
3.设置对方名字
private static String getConversationValue(AVIMConversation conversation, String userID,String key) {
try {
HashMap> map= convertMap(conversation);
String name = map.get(key).get(userID);
if (name != null) {
return name;
}
return "";
} catch (Exception e) {
return "";
}
}
private static HashMap> convertMap(AVIMConversation conversation){
Object attributes = conversation.get(kOMKAttribute);
if(attributes==null){
return new HashMap<>();
}
if(attributes instanceof JSONObject){
return JSON.parseObject(((JSONObject)attributes).toJSONString(),new TypeReference>>(){});
}else if(attributes instanceof Map){
return (HashMap>) attributes;
}else{
throw new RuntimeException();
}
}