1. 程式人生 > >Android基於XMPP Smack Openfire下學習開發IM(五)連線斷開重連

Android基於XMPP Smack Openfire下學習開發IM(五)連線斷開重連

學習過程中大家都碰到過連線被斷開的問題給困擾吧,下面教大家如何做到連線斷開後,重新連線

首先要建立連線監聽器,用來監聽連線狀態,這裡我寫了一個類

繼承了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);

先介紹到這裡~

相關推薦

Android基於XMPP Smack Openfire學習開發IM()連線斷開

學習過程中大家都碰到過連線被斷開的問題給困擾吧,下面教大家如何做到連線斷開後,重新連線 首先要建立連線監聽器,用來監聽連線狀態,這裡我寫了一個類 繼承了ConnectionListener,重寫了裡面5個方法,最重要的兩個方法connectionClosed()和conn

Android基於XMPP Smack Openfire學習開發IM()斷開

pen ide get ref ces 最好 string smack led 學習過程中大家都碰到過連接被斷開的問題給困擾吧,下面教大家如何做到連接斷開後,重新連接首先要創建連接監聽器,用來監聽連接狀態,這裏我寫了一個類繼承了ConnectionListener,重寫了裏

Android基於XMPP Smack Openfire學習開發IM(一)實現使用者註冊、登入、修改密碼和登出等

以前學習過用Scoket 建立聊天,簡單的建立聊天是沒問題的,但如果要實現多人複雜的聊天,後臺伺服器程式碼就比較複雜,對於我這新手來講就比較難了。後來在網上看到用openfire做伺服器,利用強大的Smack API庫來實現IM聊天就簡單多了。  網上也有很多關於這方面的資

Android基於XMPP Smack Openfire開發IM【四】初步實現兩個客戶端通訊

本部落格要介紹的內容: Openfire做伺服器端,兩個客戶端:Spark、android模擬器。實現兩個客戶端之間的通訊。 第一步:啟動openfire伺服器。(這裡需要用到兩個使用者登入,前面的部落格中已經說明如何新增使用者了。) [img] [/img] 第

Android基於XMPP Smack Openfire開發IM【三】客戶端接收伺服器傳送的訊息

Demo需求:android客戶端接收伺服器傳送來的訊息。 第一,客戶端程式碼如下: MainActivity未做改動,與之前兩篇一樣 Java程式碼   package com.example.openfiretest;   import org.jivesoftware.smack.Chat;

android 使用xmpp smack openfire實現即時通訊(一)

介紹: XMPP :XMPP(可擴充套件訊息處理現場協議)是基於可擴充套件標記語言(XML)的協議,它用於即時訊息(IM)以及線上現場探測。  smack:是一個開源包,易於使用的XMPP(jabber)客戶端類庫 openfire :作為伺服器提供服務。 ope

初識TPOT:一個基於Python的自動化機器學習開發工具

1. TPOT介紹 一般來講,建立一個機器學習模型需要經歷以下幾步: 資料預處理 特徵工程 模型選擇 超引數調整 模型儲存 本文介紹一個基於遺傳演算法的快速模型選擇及調參的方法,TPOT:一種基於Python的自動機器學習開發工具。專案原始碼位於:https://github.com/EpistasisL

Android 基於 MVP 框架的拉重新整理、上拉載入頁面,View和Presenter層基類封裝

前言 Android 專案開發中經常遇到列表式頁面,並且需要實現下拉重新整理,上拉到底後加載下一頁的功能,這裡結合我們專案正在使用的 MVP 框架,介紹一種基類封裝方案,實現 View、Adapter、資料處理Presenter層的基類封裝,後續繼承這幾個類,

Android RxJava操作符的學習---功能性操作符--網路請求出錯(結合Retrofit)

1. 需求場景   2. 功能說明 功能需求說明     功能邏輯  例項說明 在本例子中:採用Get方法對 金山詞霸API 傳送網路請求 通過 斷開網路連線 模擬 網路異常錯誤(恢復網路即可

websocket斷開解決方案,基於子慕大詩人部落格修改 健壯強化版

歡迎大家來到Altaba的部落格  2017年11月27日 相信隨著H5的演進,我們越來越多接觸到websocket的使用,本身就使用此技術並不難,但是在開發中會遇到各種無法預測的原因,有瀏覽器相容問題,有後臺的意外斷開,狀態百出。 本人前端開發遇到這樣的問題:websoc

XMPP學習——Android客戶端與openfire伺服器單雙向TLS通訊

本文從TLS安全傳輸層協議的簡單流程、如何生成自簽名CA證書、自頒發伺服器&客戶端證書、配置openfire伺服器安全連線去描述如何建立一個使用TLS加密的XMPP聊天通道。 這裡的smack版本是V4.2.3,openfire伺服器版本也是V4.2.3

Android學習筆記--基於XMPP的即時通訊

一、常見即時通訊實現 socket openfire+asmack 環信 信鴿 融雲 二、XMPP優勢 1. 開放性 XMPP協議是自由、開放、公開的,並且易於瞭解。而且在客戶端、伺服器、元件、原始碼庫等方面,都已經各自有多種實現。 2.跨平臺 客戶端只要基於X

Win10使用Anaconda搭建基於TensorFlow的深度學習開發環境

Anaconda是很多人都在使用的一個深度學習實踐平臺,輕鬆安裝即可開始使用,其中包含了很多專業的庫和工具,如Python、pip、Spyder、NumPy、SciPy、Matplotlib等。 可以直接在Anaconda官網下載安裝Anaconda,官方提供預設Pytho

Scrapy爬蟲學習筆記 - windows搭建開發環境1

ima 搭建開發環境 環境 navicat win pyc arm bsp mysql 一、pycharm的安裝和簡單使用 二、mysql和navicat的安裝和使用 三、wi

基於氚雲平臺的應用開發學習(三)

ren sea member acc one principal 事件 tlist dstat 這篇將繼續圍繞上篇所說的第二種方法,記錄說明一下自己遇到的問題以及解決方法。 一、創建或更新包含子表的表單 二、流程事件變化後執行某些邏輯 一、創建或更新包含子表的表單 1、

Android studio JNI 開發實例

ndk create void 上層 執行效率 約束 添加 src 傳輸協議 在AS中進行 NDK 開發之前,我們先來簡單的介紹幾個大家都容易搞懵的概念: 到底什麽是JNI,什麽是NDK? 何為“交叉編譯”? 先看什麽是 JNI?JNI 的全稱就是

Openfire XMPP Smack RTC IM 即時通訊 聊天

ray 控制臺 cati 探測 ica strong ttext 包括 login Openfire XMPP Smack RTC IM 即時通訊 聊天 目錄 目錄簡介Openfire 簡介相關的幾個名詞SmackSparkJIDXMPPOpenfire 安裝配置測

基於.NET的CAD二次開發學習筆記二:AutoCAD .NET中的物件

1、CAD物件 一個CAD檔案(DWG檔案)即對應一個數據庫,資料庫中的所有組成部分,看的見(包括點、多段線、文字、圓等)和看不見(圖層、線型、顏色等)的都是物件,資料庫本身也是一個物件。 直線、圓弧、文字和標註等圖形物件都是物件。 線型與標註樣式等樣式設定都是物件。 圖層

基於.NET的CAD二次開發學習筆記一:CAD開發入門

1、AutoCAD .NET API由不同的DLL檔案組成,它們提供用於訪問圖形檔案或AutoCAD應用程式的包含豐富的類、結構、方法和事件。每一個DLL檔案都定義不同的使用基於功能的庫組織元件的名稱空間。 下面是你將頻繁地要使用的AutoCAD .NET API 的三個主要的DLL檔案:

只能用Android studio做平臺移植了! 在Windows10開發Android

  安裝好IDE後, 會一直顯示同步失敗, 看看如下步驟:   需要注意的是:  -> 安裝NDK      自帶的NDK就是辣雞!    自己去下一個15版本的 -> 按照系統提示一步一步安裝其他未安裝的元