注册

消息发送失败:201---User has not login.

环信3.0,我集成了EaseUI,可以成功登录并执行了登录成功的回调.
        EMClient.getInstance().login(userName, pwd, new EMCallBack() {
@Override
public void onSuccess() {
EMClient.getInstance().groupManager().loadAllGroups();
EMClient.getInstance().chatManager().loadAllConversations();
Log.v("环信登录成功","!!!!!!!!!!!");
}

@Override
public void onError(int i, String s) {


}

@Override
public void onProgress(int i, String s) {
Log.e("环信聊天", "登录聊天服务器失败");
}
});
登录到聊天界面后我发送了文本消息,接着就提示我User has not login.
然后我在发送处加了判断当前用户是否登录
 
  protected void sendMessage(EMMessage message){
if(!EMClient.getInstance().isLoggedInBefore()) {
Log.v("你并没有登录","!!!!!!!!!!!!!!!!!");
}
if (message == null) {
return;
}
if(chatFragmentListener != null){
//设置扩展属性
chatFragmentListener.onSetMessageAttributes(message);
}
// 如果是群聊,设置chattype,默认是单聊
if (chatType == EaseConstant.CHATTYPE_GROUP){
message.setChatType(ChatType.GroupChat);
}else if(chatType == EaseConstant.CHATTYPE_CHATROOM){
message.setChatType(ChatType.ChatRoom);
}
//发送消息
EMClient.getInstance().chatManager().sendMessage(message);
message.setMessageStatusCallback(new EMCallBack() {
@Override
public void onSuccess() {
Log.v("====成功发送了消息====","====成功发送了消息====");
}

@Override
public void onError(int i, String s) {
Log.v("====消息发送失败原因=====","code=="+i+"====desc==="+s);
}

@Override
public void onProgress(int i, String s) {

}
});
//刷新ui
if(isMessageListInited) {
messageList.refreshSelectLast();
}
}

Log.v("你并没有登录","!!!!!!!!!!!!!!!!!");
并没有打印,看到社区也有很多类似的问题,但始终没有一个合理的解释
 
 
已邀请:

teemo2009 - 90后IT

好吧,经过1个多小时和客服小哥纠缠终于解决了
问题出在初始化
 
以下我是我修改后初始化的代码
    /*环信*/
private void initEmChat(){
EMOptions options = initChatOptions();
if (EaseUI.getInstance().init(context, options)) {
//设为调试模式,打成正式包时,最好设为false,以免消耗额外的资源
EMClient.getInstance().setDebugMode(true);
}

}

private EMOptions initChatOptions(){
// 获取到EMChatOptions对象
EMOptions options = new EMOptions();
// 默认添加好友时,是不需要验证的,改成需要验证
options.setAcceptInvitationAlways(false);
// 设置是否需要已读回执
options.setRequireAck(true);
// 设置是否需要已送达回执
options.setRequireDeliveryAck(false);
//使用gcm和mipush时,把里面的参数替换成自己app申请的
//设置google推送,需要的GCM的app可以设置此参数
options.setGCMNumber("324169311137");
//在小米手机上当app被kill时使用小米推送进行消息提示,同GCM一样不是必须的
options.setMipushConfig("2882303761517426801", "5381742660801");
//集成华为推送时需要设置
// options.setHuaweiPushAppId("10492024");
return options;
}
 重点就在于 
EMClient.getInstance().setDebugMode(true);这句话 必须在
EaseUI初始化之后才能执行

要回复问题请先登录注册