默認
發表評論 2
想開發IM:買成品怕坑?租第3方怕貴?找開源自已擼?盡量別走彎路了... 找站長給點建議
[已回復] 求助MobileIMSDK 退出登錄再重新登錄后出現203錯誤
閱讀(976) | 評論(2 收藏 淘帖1
參照了這個帖子http://www.4239727.live/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.4239727.live/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錯誤這類問題了!
簽名: 《微信后臺基于時間序的新一代海量數據存儲架構的設計實踐》:http://www.4239727.live/thread-2970-1-1.html
謝謝,我嘗試下!
打賞樓主 ×
使用微信打賞! 使用支付寶打賞!

返回頂部
股票配资平台都找股牛网