学习过程中大家都碰到过连接被断开的问题给困扰吧,下面教大家如何做到连接断开后,重新连接

首先要创建连接监听器,用来监听连接状态,这里我写了一个类

继承了ConnectionListener,重写了里面5个方法,最重要的两个方法connectionClosed()和connectionClosedOnError()

前者为连接正常断开,后者是连接异常断开,不管是正常还是异常,我们都要监听到

这里写了一个定时器,两秒进行连接一次,注释写的也很清楚,不做太多介绍

要注意的是我把用户名和密码都存到sharePreferences中了

package com.techrare.listener;

import java.util.Timer;
import java.util.TimerTask; import org.jivesoftware.smack.ConnectionListener; import android.util.Log; import com.techrare.taxicall.MainActivity;
import com.techrare.utils.Utils;
import com.techrare.utils.XmppConnection; /**
* 连接监听类
*
* @author Administrator
*
*/
public class TaxiConnectionListener implements ConnectionListener {
private Timer tExit;
private String username;
private String password;
private int logintime = 2000; @Override
public void connectionClosed() {
Log.i("TaxiConnectionListener", "連接關閉");
// 關閉連接
XmppConnection.getInstance().closeConnection();
// 重连服务器
tExit = new Timer();
tExit.schedule(new timetask(), logintime);
} @Override
public void connectionClosedOnError(Exception e) {
Log.i("TaxiConnectionListener", "連接關閉異常");
// 判斷為帳號已被登錄
boolean error = e.getMessage().equals("stream:error (conflict)");
if (!error) {
// 關閉連接
XmppConnection.getInstance().closeConnection();
// 重连服务器
tExit = new Timer();
tExit.schedule(new timetask(), logintime);
}
} class timetask extends TimerTask {
@Override
public void run() {
username = Utils.getInstance().getSharedPreferences("taxicall",
"account", MainActivity.context);
password = Utils.getInstance().getSharedPreferences("taxicall",
"password", MainActivity.context);
if (username != null && password != null) {
Log.i("TaxiConnectionListener", "嘗試登錄");
// 连接服务器
if (XmppConnection.getInstance().login(username, password)) {
Log.i("TaxiConnectionListener", "登錄成功");
} else {
Log.i("TaxiConnectionListener", "重新登錄");
tExit.schedule(new timetask(), logintime);
}
}
}
} @Override
public void reconnectingIn(int arg0) {
} @Override
public void reconnectionFailed(Exception arg0) {
} @Override
public void reconnectionSuccessful() {
} }

其次就是给连接设置监听器了,最好放在登录方法里,关闭连接方法里移除监听

// 添加連接監聽
TaxiConnectionListener connectionListener = new TaxiConnectionListener();
getConnection().addConnectionListener(connectionListener);
connection.removeConnectionListener(connectionListener);

先介绍到这里~

最新文章

  1. [AlwaysOn Availability Groups]排查:AG超过RTO
  2. C++的三种继承方式简述
  3. Hibernate逆向工程
  4. switch的方便用法
  5. 配置PLSQL,提升工作效率
  6. Linux的诞生史
  7. Java for Android 第三周学习总结
  8. 聊聊Python的time模块
  9. 计划任务执行bat
  10. Json Schema的使用
  11. Java volatile关键字的用法
  12. 富文本粘贴word文档内容图片处理
  13. SpringBoot 无法显示html文件 找不到html文件 如果显示html文件
  14. soapUI-Conditional Goto
  15. subltime快捷键
  16. 浅谈 Java 中的枚举
  17. Objective-C的“多继承”——消息转发
  18. HDU3530 Subsequence(单调队列)
  19. Flask基本知识
  20. XSS----payload,绕过,xss小游戏记录

热门文章

  1. 【转载】Java 升级到jdk7后DbVisualizer 6 启动空指针的处理方案
  2. C++ 数据类型及相关问题 及输出精度控制
  3. xrange和range区别
  4. Matlab 文件命名规则
  5. 【win8技巧】win8一键截图自动保存到文件夹
  6. SEO 网站页面SEO优化之页面title标题优化
  7. UVALive 6602 Counting Lattice Squares
  8. ASP.NET 弹出对话框和页面之间传递值的经验总结
  9. easyui源码翻译1.32--MenuButton(菜单按钮)
  10. linux下安装jira详细步骤