【Android】XMPP不能自动重连的问题

第一步  配置

config.setReconnectionAllowed(true);

第二部 添加监听事件

connection.connect();
if (connection.isConnected()) {
	connectionListener = new ViConnectionListener();
	connection.addConnectionListener(connectionListener);
}

事件代码:

public class ViConnectionListener implements ConnectionListener {


		@Override
	public void connectionClosed() {

		Log("connectionClosed--->");
		
	}

	@Override
	public void connectionClosedOnError(Exception e) {
		Log("connectionClosedOnError--->" );
				// 这里就是网络不正常或者被挤掉断线激发的事件
		if (e.getMessage().contains("conflict")) { // 被挤掉线
			Toast("被挤下线");
			/*
			 * log.e("来自连接监听,conn非正常关闭"); log.e("非正常关闭异常:"+arg0.getMessage());
			 * log.e(con.isConnected());
			 */
			// 关闭连接,由于是被人挤下线,可能是用户自己,所以关闭连接,让用户重新登录是一个比较好的选择
			XmppTool.getInstance().closeConnection();
			// 接下来你可以通过发送一个广播,提示用户被挤下线,重连很简单,就是重新登录
		} else if (e.getMessage().contains("Connection timed out")) {// 连接超时
			// 不做任何操作,会实现自动重连
			Log( "连接超时");
		}
	}
	@Override
	public void reconnectingIn(int arg0) {
		Log("reconnectingIn--->");
	}

	@Override
	public void reconnectionFailed(Exception arg0) {
		Log("reconnectionFailed--->" + arg0.getMessage());
		arg0.printStackTrace();
	}

	@Override
	public void reconnectionSuccessful() {
		Log("reconnectionSuccessful--->"); 
	}
	private void Log(String msg){
		Log.e("---->",msg);
	}
}

第三步、最重要的一步

需在代码前静态加载ReconnectionManager,重连才能正常工作:  (之前都忘了加这个 导致无法自动重连)

static{ 
    try{
        Class.forName("org.jivesoftware.smack.ReconnectionManager");
    }catch(Exception e){
	e.printStackTrace();
    }
}


转载于:https://my.oschina.net/gejw0623/blog/213555

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值