openfire Android学习(五)------连接断开重连
首先要创建连接监听器,用来监听连接状态,这里我写了一个类
继承了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);
openfire Android学习(五)------连接断开重连的更多相关文章
- Android基于XMPP Smack Openfire下学习开发IM(五)连接断开重连
学习过程中大家都碰到过连接被断开的问题给困扰吧,下面教大家如何做到连接断开后,重新连接 首先要创建连接监听器,用来监听连接状态,这里我写了一个类 继承了ConnectionListener,重写了里面 ...
- zookeeper 大量连接断开重连原因排查
转自:http://blog.csdn.net/hengyunabc/article/details/41450003?utm_source=tuicool&utm_medium=referr ...
- openfire Android学习(三)----会议室创建、加入以及查询会议室中所有成员等
openfire 中的会议室不像QQ群一样,不能保存那些离线用户,加入会议室后,一旦断开连接,就会离开会议室. 虽然如此,但如果要实现也不是不可能,我们可以自己做后台来保存,有兴趣的可以去试着实现一下 ...
- openfire Android学习(一)----实现用户注册、登录、修改密码和注销等
以前学习过用Scoket 建立聊天,简单的建立聊天是没问题的,但如果要实现多人复杂的聊天,后台服务器代码就比较复杂,对于我这新手来讲就比较难了.后来在网上看到用openfire做服务器,利用强大的Sm ...
- openfire Android学习(六)----总结
Xmpp的一些方法整理到一个工具类中了 XmppConnection.java [java] view plaincopy [java] view plaincopy import java.io.B ...
- android学习五---OpenCV for android环境搭建
学习android的目的是想在手机上实现计算机视觉的算法.一般算法的研究都是在Matlab上进行,但是手机平台没有那么多的计算资源,用matlab显然是不太现实的.而OpenCV是基于C++语言编写的 ...
- openfire Android学习---android客户端聊天开发之登录 和 注销登录
一切就绪,新建一个android测试工程: 上网权限配置,界面绘制啥的,这里就不说了. 首先 导入一个smark包.这个是用来维护长连接的,也可以是asmark.我用的是asmark 先普及一些基本知 ...
- Android学习五:Content Provider 使用
1ContentProvider相关知识1.1在安卓应用中,通过文件方式对外共享数据,需要进行文件操作读写数据:采用sharedpreferences共享数据,需要使用sharedpreference ...
- android学习五 Intent
1.Intent是组件间调用的桥梁. 2.Android系统定义了很多Intent http://developer.android.com/guide/components/intents-c ...
随机推荐
- selenium2等待元素加载
1.硬性等待 Thread.sleep(8000); 所谓的硬性等待就是,执行完相应操作就等待我设置的8s.无论网速快与慢,网速快的话,也许5s就打开网页了,可是程序必须接着等待剩下的3秒. 网速慢的 ...
- HT1621控制的段式液晶驱动程序
MCU是STM8S207 /*LED 字模结构*/ typedef struct { char mChar; u8 mModal; }LED_MODAL_DEFINE; typedef struct ...
- mysql查询的语法
单表查询语法 SELECT DISTINCT 字段1,字段2... FROM 表名 WHERE 条件 GROUP BY field HAVING 筛选 ORDER BY field LIMIT 限制条 ...
- Activity树图
- shell批量修改文件名
[root@localhost file1]# ls a.htm b.htm c.htm d.htm pl.sh [root@localhost file1]# vi pl.sh #!/bin/bas ...
- [转]mysql Access denied for user 'root'@'localhost' 问题的解决方法
解决方案如下: # /etc/init.d/mysql stop # mysqld_safe --user=mysql --skip-grant-tables --skip-networking &a ...
- Leetcode27--->Remove Element(移除数组中给定元素)
题目:给定一个数组array和一个值value,移除掉数组中所有与value值相等的元素,返回新的数组的长度:要求:不能分配额外的数组空间,且必须使用原地排序的思想,空间复杂度O(1); 举例: Gi ...
- day03_07 变量的重新赋值01
在cmd中退出python,需要使用quit()命令 name = "Alex Li" name2 = name print(name,name2) name = "Ja ...
- 01 Java 代码是怎么运行的
Java代码运行的方式 1:在开发工具中运行 2:双击 jar 文件运行 3:在命令行中运行 4:在网页中运行 上述运行方式都离不开 JRE,也就是 Java 运行时环境.实际上 JRE 仅包含运行 ...
- R语言采坑系列——Warning message: In validDetails.polygon(x) : 强制改变过程中产生了NA
用ggplot2的geom_density_2d时,总是不能填充图案,并报错: Warning message: In validDetails.polygon(x) : 强制改变过程中产生了NA 解 ...
