默认
发表评论 6
想开发IM:买成品怕坑?租第3方怕贵?找开源自已撸?尽量别走弯路了... 找站长给点建议
[已解决] MobileIMSDK 退出登录后再重新登录的问题
阅读(43620) | 评论(6 收藏 淘帖1
问题描述:  退出登录   如果不是退出整个app,而是返回到登录页面 , 再登录的话就会报:“数据发送失败 错误码 203”
下面是我 在demo处改动的代码:
1.增加MyApplication:
public class MyApplication extends Application {
@Override
public void onCreate() {
  // TODO Auto-generated method stub
  super.onCreate();
  // 确保MobileIMSDK被初始化哦(整个APP生生命周期中只需调用一次哦)
  IMClientManager.getInstance(this).initMobileIMSDK();
}
}


2.取消登录页面的mobileIMSDK的初始化: LoginActivity->onCreate
@Override
protected void onCreate(Bundle savedInstanceState)
{
  super.onCreate(savedInstanceState);
  
  //
  this.setContentView(R.layout.demo_login_activity_layout);
  
  // 界面UI基本设置
  initViews();
  initListeners();
  
//  // 确保MobileIMSDK被初始化哦(整个APP生生命周期中只需调用一次哦)
//  IMClientManager.getInstance(this).initMobileIMSDK();
  
  // 登陆有关的初始化工作
  initForLogin();
}


3.登录成功处取消掉结束登录页面:LoginActivity->initForLogin()
onLoginSucessObserver = new Observer(){
   @Override
   public void update(Observable observable, Object data)
   {
    // * 已收到服务端登陆反馈则当然应立即取消显示登陆进度条
    onLoginProgress.showProgressing(false);
    // 服务端返回的登陆结果值
    int code = (Integer)data;
    // 登陆成功
    if(code == 0)
    {
     //** 提示:登陆/连接 MobileIMSDK服务器成功后的事情在此实现即可
     
     // 进入主界面
     startActivity(new Intent(LoginActivity.this, MainActivity.class));
     // 同时关闭登陆界面
//     finish();
    }
    // 登陆失败
    else
    {
     new AlertDialog.Builder(LoginActivity.this)
      .setTitle("友情提示")  
      .setMessage("Sorry,IM服务器连接失败,错误码="+code)
      .setPositiveButton("知道了", null)
    .show();
    }
   }
  };


4.发送消息页面 取消结束整个app:MainActivity->doExit()
private void doExit()
{
  finish();
//  System.exit(0);
}


5.最后在AndroidManifest里面的application添加MyAppclication
  <application
       android:name="net.openmob.mobileimsdk.android.demo.MyApplication"
        android:allowBackup="true"
        android:icon="@drawable/icon"
        android:label="@string/app_name"
        android:theme="@style/AppTheme" >

6.步骤重现:点击登录,进入到发送消息页面 然后按返回键<里面有退出登录的方法>,回到登录页面后再点击登录 就会出现 :发送数据错误 错误码203!  

即时通讯网 - 即时通讯开发者社区! 来源: - 即时通讯开发者社区!

标签:MobileIMSDK
上一篇:[已回复] 求教MobileIMSDK的UDP传输过程中头部的大小下一篇:[已回复] 关于MobileIMSDK里的msgId生成疑问

本帖已收录至以下技术专辑

推荐方案
评论 6
你在退出登陆时,需要调用一下 IMClientManager.getInstance(this).release()(实际上相当于直接调用ClientCoreSDK.getInstance().release();),这样才算真正退出IM,有做这个调用吗?没有做,那你就应该补上
引用:JackJiang 发表于 2017-07-11 14:42
你在退出登陆时,需要调用一下 IMClientManager.getInstance(this).release()(实际上相当于直接调用Client ...

我看到源码的退出登录:LocalUDPDataSender.getInstance(SelfMatchActivity.this).sendLoginout();这个方法其实是调用了
   public int sendLoginout() {
        int code = 0;
        if(ClientCoreSDK.getInstance().isLoginHasInit()) {
            byte[] b = ProtocalFactory.createPLoginoutInfo(ClientCoreSDK.getInstance().getCurrentLoginUserId()).toBytes();
            code = this.send(b, b.length);
        }

        ClientCoreSDK.getInstance().release();        return code;
    }

这个方法的 ClientCoreSDK.getInstance().release();        
引用:Jellal 发表于 2017-07-11 15:23
我看到源码的退出登录:LocalUDPDataSender.getInstance(SelfMatchActivity.this).sendLoginout();这个方 ...

ok,那就看看你错误码,是203,即表示“客户端未初始化”
那你应该在重新登陆时再把 IMClientManager.getInstance(this).initMobileIMSDK(); 调用一次,正常情况:即在不退出app重新登陆的情况下,是不需要再次调用,但release()后,想再次使用那一定要成对的调用init,你看看源码。
引用:JackJiang 发表于 2017-07-11 15:32
ok,那就看看你错误码,是203,即表示“客户端未初始化”:
那你应该在重新登陆时再把 IMClientManager. ...

还是不好使!
引用:Jellal 发表于 2017-07-11 17:00
还是不好使!

重新登陆的完整逻辑代码贴出来
问题已解决:这是Demo代码中少调用了一行代码而已(即在退出登陆时没有重置IMClientManager里的init为false),请取github上最新的demo代码,比对下,很简单的问题!

另外,统一参考这个帖子《 [已回复] 求助MobileIMSDK 退出登录再重新登录后出现203错误
打赏楼主 ×
使用微信打赏! 使用支付宝打赏!

返回顶部