默认
发表评论 2
想开发IM:买成品怕坑?租第3方怕贵?找开源自已撸?尽量别走弯路了... 找站长给点建议
[已解决] 求助MobileIMSDK 退出登录再重新登录后出现203错误
阅读(37965) | 评论(2 收藏 淘帖1
参照了这个帖子http://www.52im.net/thread-910-1-1.html。退出登录后,再登录时,出现如下提示:

W/LocalUDPDataReciever: 【IMCORE】本地UDP监听停止了(socket被关闭了?):Socket closed,应该是用户退出登陆或网络断开了。
D/MainActivity: 注销登陆请求已完成!
I/ClientCoreSDK: 还未注册android网络事件广播的监听器,本次取消注册已被正常忽略哦.
D/NSD: curPkgName is not in list
D/NSD: curPkgName is not in list
D/NSD: curPkgName is not in list
V/AudioManager: playSoundEffect   effectType: 0
    querySoundEffectsEnabled...
D/LocalUDPDataSender: 【IMCORE】数据发送失败, 错误码是:203!

请问这个怎么解决?

下面是修改的地方,几乎与帖子http://www.52im.net/thread-910-1-1.html一样。
下面是具体改动的:

一、初始化
import android.app.Application;

public class MyApplication extends Application {

    @Override
    public void onCreate() {
        super.onCreate();

        // 确保MobileIMSDK被初始化(整个APP生生命周期中只需调用一次)
// 提示:在不退出APP的情况下退出登陆后再重新登陆时,需确保调用本方法一次,不然会报code=203错误!
IMClientManager.getInstance(this).initMobileIMSDK();
    }
}
在AndroidManifest.xml中
<application
android:name=".MyApplication"
android:allowBackup="true"
android:icon="@drawable/icon"
android:label="@string/app_name"
android:theme="@style/AppTheme" >

二、LoginActivity中两处改动
(一)
protected void onCreate(Bundle savedInstanceState)
{
   super.onCreate(savedInstanceState);
   
   //
this.setContentView(R.layout.demo_login_activity_layout);
   
   // 界面UI基本设置
initViews();
   initListeners();
   
   // 确保MobileIMSDK被初始化哦(整个APP生生命周期中只需调用一次哦)
// 提示:在不退出APP的情况下退出登陆后再重新登陆时,请确保调用本方法一次,不然会报code=203错误哦!
//IMClientManager.getInstance(this).initMobileIMSDK();
   // 登陆有关的初始化工作
initForLogin();
}
(二)
private void initForLogin()
{
   // 实例化登陆进度提示封装类
onLoginProgress = new OnLoginProgress(this);
   // 准备好异步登陆结果回调观察者(将在登陆方法中使用)
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("SorryIM服务器连接失败,错误码="+code)
               .setPositiveButton("知道了", null)
         .show();
         }
      }
   };
}

三、MainActivity中
private void doExit()
{
   finish();
   //System.exit(0);
}
说明的是,doLogout()中有IMClientManager.getInstance(MainActivity.this).resetInitFlag();


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

标签:MobileIMSDK
上一篇:[已回复] MobileIMSDK发送IM离线消息,服务器只接收到部分消息的疑问下一篇:[已回复] 请问,moblieMSDK有没有多端登录和消息漫游同步功能

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

推荐方案
评论 2
退出到登陆界面后,再登陆,就需要再次initSDK了,因为退出登陆时已经做了releaseSDK。

你可以参考一下RainbowChat里的实现代码。

RainbowChat中,退出登陆时,会调用:
IMClientManager.getInstance(this). release();

RainbowChat中,每次在打开登陆界面前就会调用以下代码:
        /**
         * 打开LoginActivity的Intent构造方法. 此方法通常用于无法普通地打开登陆界面的场景.
         * 
         * @param thisActivity
         * @return
         */
        public static Intent createLoginIntent(Context thisActivity)
        {
                // init MobileIMSDK first(必须保证此代码被调用,否则IM框架无法完成IM服务器的连接等工作)
                // 通常在打开登陆界面调用此方法,是合理的,因为它下一步就是登陆im框架啊
            MyApplication.getInstance(thisActivity).getIMClientManager().initMobileIMSDK();
            
                Intent intent = new Intent(thisActivity, LoginActivity.class);
                return intent;
        }

以上就能保证,只要你进到登陆界面,就一定能保证调用过initMobileIMSDK()方法,也就不会出现203错误这类问题了!
谢谢,我尝试下!
打赏楼主 ×
使用微信打赏! 使用支付宝打赏!

返回顶部