注册

Android 头像和昵称的修改

1.在EaseChatFragment中的EaseChatFragmentHelper类中的onSetMessageAttributes的方法中设置自己的头像和昵称,
    @Override
public void onSetMessageAttributes(EMMessage message) {
String username = xxx;//自定义名称
String avatar = yyy;//自定义头像

message.setAttribute("avatar", avatar);
message.setAttribute("username", username);
}


2.在easeUI中的EaseUserUtils类里面有两个方法setUserNick和setUserAvatar,分别是设置昵称和头像。
将setUserAvatar改为:
/**
* 显示头像
* set user avatar
* @param message
*/
public static void setUserAvatar(Context context, EMMessage message, ImageView imageView){
if (message == null){
return;
}

//发送消息 显示本地头像
if (message.direct() == EMMessage.Direct.SEND){
Glide.with(context).load(localUrl).into(imageView);
return;
}else {
EaseUser easeUser = UserProfileCache.GetSpCacheUser(context, message.getFrom());
//本地已缓存了这个用户信息 直接绑定
if (easeUser != null){
String avatar = easeUser.getAvatar();
if(avatar != null){
try {
Glide.with(context).load(avatar).into(imageView);
} catch (Exception e) {
//use default avatar
Glide.with(context).load(R.drawable.ease_default_avatar).into(imageView); }
}else{
Glide.with(context).load(R.drawable.ease_default_avatar).into(imageView);
}
}
//本地没有缓存了这个用户信息 保存本地
else {
try {
String avatar = message.getStringAttribute("avatar");

if(avatar != null){
try {
Glide.with(context).load(avatar).into(imageView);
} catch (Exception e) {
//use default avatar
Glide.with(context).load(R.drawable.ease_default_avatar).into(imageView); }
}else{
Glide.with(context).load(R.drawable.ease_default_avatar).into(imageView);
}
EaseUserUtils.getUserInfo(context, message);
} catch (HyphenateException e) {
e.printStackTrace();
}
}
}
}

public static EaseUser getUserInfo(Context context, EMMessage message){

EaseUser user = null;
try {
String avatar = message.getStringAttribute("avatar");
String nick = message.getStringAttribute("username");

user = new EaseUser(message.getFrom());
user.setAvatar(avatar);
user.setNickname(nick);
EaseCommonUtils.setUserInitialLetter(user);
UserProfileCache.setSpCacheUser(context, message.getFrom(), user);
} catch (HyphenateException e) {
e.printStackTrace();
}
return user;
}

UserProfileCache为用户缓存类。
public class UserProfileCache {

private static Gson gson = new Gson();
public static String SP_CACHE_USER = "sp_cache_user";

private static SharedPreferences spf;

public static void setSpCacheUser(Context context, String user_id, EaseUser cacheUser){
if (user_id == null){
return;
}
if (spf == null){
spf = context.getSharedPreferences(SP_CACHE_USER, Context.MODE_PRIVATE);
}
SharedPreferences.Editor editor = spf.edit();
editor.putString(user_id, gson.toJson(cacheUser));
editor.commit();
}

public static EaseUser GetSpCacheUser(Context context, String userId){
if (userId == null){
return null;
}
if (spf == null){
spf = context.getSharedPreferences(SP_CACHE_USER, Context.MODE_PRIVATE);
}
String cacheUserString = spf.getString(userId,null);
if (cacheUserString == null){
return null;
}else {
return gson.fromJson(cacheUserString,EaseUser.class);
}
}

}

注:这种方式不用再创建数据库,只是对本地消息记录的显示做了下调整。其实是可以做的更好,比如把消息记录存到自己服务器,什么问题都不是问题,但是目前这里没有过多要求,所以还是不去麻烦后台爸爸,自己在客户端改了。
 

1 个评论

文末一句“后台爸爸”道出了多少辛酸/捂脸

要回复文章请先登录注册