环信IM中的DemoHelper提供了实现设置聊天头像的方法,但是我们有时候不希望按照demo的基础进行开发,或者把整个demo作为依赖导入主项目中。其实在easeui中提供了一个EaseUserProfileProvider接口,该接口就是获取我们用户信息的,我们要做的就是实现该接口,并且进行设置用户的封装,并在程序中调用就可以达到设置、修改聊天头像的目的,实现该接口如下。
public class MyUserProvider implements EaseUI.EaseUserProfileProvider{
//单例类
private static MyUserProvider myUserProvider;
private Map<String,EaseUser> userList = new HashMap<>();
private String ImgUrl="";//头像(需要从服务器获取)
@Override
public EaseUser getUser(String username) {
if(userList.containsKey(username))
//有就返归这个对象。。
return userList.get(username);
System.out.println("error : 没有 数据" + username);
return null;
}
//进行封装
public void setUser(String username,String nickname,String imageUrl){
if(!userList.containsKey(username)) {
EaseUser easeUser = new EaseUser(username);
userList.put(username,easeUser);
}
EaseUser easeUser = getUser(username);
// 环信的easerUser的父类有一个setNickname 的方法可以用来设置昵称,直接调用就好。。
easeUser.setNickname(nickname);
// 同理,设置一个图像的url就好,因为他加载头像是使用glide加载的
easeUser.setAvatar(imageUrl);
}
// 获取单例子
public static MyUserProvider getInstance() {
if (myUserProvider == null) {
myUserProvider = new MyUserProvider();
}
return myUserProvider;
}
public static void Uninit(){
myUserProvider = null;
}
}
说明下setUser的参数,username环信用户名(唯一)、nickname(昵称,用户之间昵称可以相同)、imageUrl(图片URL)
实现类开发完毕,接着需要进行调用,在调用方法前,必须进行环信的初始化,以及在环信初始化后加上以下代码来进行Provider的注册。
EaseUI.getInstance().setUserProfileProvider(MyUserProvider.getInstance());
接着就可以进行调用了,比如说我是在登录页面逻辑调用的,我的服务器返回了环信用户名、昵称、头像url,我把数据存放在android中的SharedPreferences中接着我的调用代码如下。
MyUserProvider.getInstance().setUser(getSharedPreferences("identify", Context.MODE_PRIVATE).getString("jgyh001",null),getSharedPreferences("identify", Context.MODE_PRIVATE).getString("yhmc001",null),getSharedPreferences("identify", Context.MODE_PRIVATE).getString("ImHeadImage",null));