android 中 smack重新登录openfire服务器
2016-01-04 11:13
393 查看
一.利用smack 中ReconnectionManager、
在新建Xmpp连接类的时候要加入以下代码:
static {
try {
Class.forName("org.jivesoftware.smack.ReconnectionManager");
} catch (Exception e) {
e.printStackTrace();
}
}
XMPPConnection一定要把setReconnectionAllowed设置为true
完整的xmpp类如下:
二.添加ConnectionListener 进行重连
首先新建自己的连接监听,继承自ConnectionListioner
此监听主要是对上一个ReconnectionManager的重连的监听,重连正常时可以自动的重新连接到openfire服务器,出现问题时,就要自行进行重登操作,主要是在重写的重新登录失败的方法reconnectionFailed(Exception arg0) 中进行操作
1.登录成功时要建立监听:
MyConnnectionListerer myConnnectionListerer = new MyConnnectionListerer();XmppTool.getConnection(SERVICE_URL, SERVICE_NAME).addConnectionListener(myConnnectionListerer);
建立自己的连接监听,继承自ConnectinListioner:
在新建Xmpp连接类的时候要加入以下代码:
static {
try {
Class.forName("org.jivesoftware.smack.ReconnectionManager");
} catch (Exception e) {
e.printStackTrace();
}
}
XMPPConnection一定要把setReconnectionAllowed设置为true
private static XMPPConnection openConnection(String url, String pcName) { try { // url、端口,也可以设置连接的服务器名字,地址,端口,用户。 Log.i("XmppTool", "url:" + url + " pcname:" + pcName); ConnectionConfiguration connConfig = new ConnectionConfiguration( url, 5222, pcName); connConfig.setReconnectionAllowed(true); // 允许重连 Log.i("XmppTool", connConfig.toString()); con = new XMPPConnection(connConfig); Log.i("XmppTool", "1" + con.toString()); con.connect(); Log.i("XmppTool", "2" + con.toString()); } catch (XMPPException xe) { Log.e("XmppToolException", xe.getMessage()); xe.printStackTrace(); // throw new IllegalStateException(xe); // /add begin 2015.09.25 wangxingtong 处理空指针 } catch (NullPointerException e) { e.printStackTrace(); } // /add end return con; }
完整的xmpp类如下:
import org.jivesoftware.smack.ConnectionConfiguration; import org.jivesoftware.smack.XMPPConnection; import org.jivesoftware.smack.XMPPException; import android.util.Log; /** * Smack连接类 * */ public class XmppTool { private static XMPPConnection con; static { try { Class.forName("org.jivesoftware.smack.ReconnectionManager"); } catch (Exception e) { e.printStackTrace(); } } /** * 连接smack * * @param url * @param pcName */ private static XMPPConnection openConnection(String url, String pcName) { try { // url、端口,也可以设置连接的服务器名字,地址,端口,用户。 ConnectionConfiguration connConfig = new ConnectionConfiguration( url, 5222, pcName); connConfig.setReconnectionAllowed(true); // 允许重连 con = new XMPPConnection(connConfig); con.connect(); } catch (XMPPException xe) { xe.printStackTrace(); } catch (NullPointerException e) { e.printStackTrace(); } return con; } public static synchronized XMPPConnection getConnection(String url, String pcName) { if (con == null) { con = openConnection(url, pcName); } return con; } //其他方法可自行添加 }
二.添加ConnectionListener 进行重连
首先新建自己的连接监听,继承自ConnectionListioner
此监听主要是对上一个ReconnectionManager的重连的监听,重连正常时可以自动的重新连接到openfire服务器,出现问题时,就要自行进行重登操作,主要是在重写的重新登录失败的方法reconnectionFailed(Exception arg0) 中进行操作
1.登录成功时要建立监听:
MyConnnectionListerer myConnnectionListerer = new MyConnnectionListerer();XmppTool.getConnection(SERVICE_URL, SERVICE_NAME).addConnectionListener(myConnnectionListerer);
建立自己的连接监听,继承自ConnectinListioner:
public class MyConnnectionListerer implements ConnectionListener { @Override public void connectionClosed() { //当smack连接正常关闭时进行操作 //注意当服务器强行使你退出时也会进入的此方法 //在此可以进行 reconnectiongFailed中重连操作 } @Override public void connectionClosedOnError(Exception arg0) { //当连接异常关闭时进行操作 //包括网路连接中断,服务器故障等 //在此可以进行 reconnectiongFailed中重连操作 } @Override public void reconnectingIn(int arg0) { //正在重新登录openfire服务器 } @Override public void reconnectionFailed(Exception arg0) { //重登失败 //利用ReconnectionManager重连失败时会进入到此方法 //重连操作: //无法自动重连时要关闭此连接监听XmppTool.getConnection().removeConnectionListener(myConnnectionListerer); //然后关闭清空Xmpp的连接,再重新启动新的连接进行登录,登录成功后再次添加此监听 } @Override public void reconnectionSuccessful() { //ReconnectionManager自动重新登录成功时进行的操作 //在掉线时可能会退出群组,在自动重连之后不会重新加入之前加入的群组,需要在此重新加入群组 } }
相关文章推荐
- 日积月累--Android动画
- android关于银行卡号的验证算法
- 如何获取StatusBar的高度(Android平台)
- Android编程之监听器用法实例分析
- android 设置Button按钮背景透明,半透明
- 学习Android中Application、静态变量和Sharedpreferences的使用与区别
- 日积月累--Gradle的使用
- Android命名规范
- 《Android源码设计模式解析与实战》读书笔记(十五)
- Android编程实现号码归属地查询的方法
- Android开发中Handler的经典总结
- Android Studio 设置代码提示和代码自动补全快捷键--Eclipse 风格
- Android 在同一个Activity使用不同layout
- android学习路线
- Android在Button按钮上同时显示文字和图片
- Android编程操作联系人的方法(查询,获取,添加等)
- (四)Android中Context的理解与使用
- 2016-1-1最新版本的linphone-android在mac上编译通过,同时建立了IDEA工程
- Android图标规范
- Android中选择器selector的使用