android即時通訊開發筆記(一)緒論~實現用戶登錄,自動登錄,註銷功能

在代碼中掙紮的死去活來,還是需要把有用的東西記下來,以後慢慢品味。

 

每次寫demo,總會發現自己的不足之處,也許還有更多的規范與常識我還不知道。今天就學到一個,記錄下。

 

有時候在activity之間的跳轉時需要傳值,一般可以用intent來做,但是如果遇到一些自定義類型的變量就傳不瞭瞭,昨天問瞭大神,今天寫瞭代碼,頓時豁然開朗瞭,原來android的getapplicationcontext正確用法是這樣啊!平常都這個都是有一些函數之類,比如Toast的要用,這次算是漲姿勢瞭。

 

平常一個activity獲取上下文對象的時候,其實用activity.this就可以瞭,返回的是這個activity的上下文對象,而getapplicationcontext返回的是應用的上下文對象,而這個函數的來源就是整個app的老大哥-Application類。這個類構成的上下文對象,生命周期和app的生命一樣長,所以,就可以自定義一個類繼承這個類,來儲存一些需要在整個app中用到的變量。

 

比如:

 

//聲明

public ApplicationHelper appState;

 

//函數中

appState = ((ApplicationHelper)this.getApplicationContext());

public class ApplicationHelper extends Application{

public ApplicationHelper getApplicationContext() {

          return ((ApplicationHelper) super.getApplicationContext());

        }

//接下來就是各種要儲存的變量與函數,各種寫啊~

}

接下來還有一個重點,在Manifest.xml中註冊信息,隻需要在application中加上android:name="***.***.***.ApplicationHelper"即可。 

 

這樣一來,很多傳值的問題就都迎刃而解瞭。

 

好吧,下面進入正題

 

想靠自己的小團隊開發android的 IM,確實是很有挑戰性的,對於我這樣的菜鳥來說,隻能摸索著慢慢來瞭。

 

用到的環境是openfire,引入瞭smack的包,這個還是很給力的,網上相關介紹很多,就不詳細介紹瞭。

 

搭建好環境引入好包,開始老老實實編代碼~

 

第一部分,實現用戶登錄,自動登錄,註銷功能,功能還是很簡單的,主要是有這些

 

一個歡迎界面的activity,先顯示一張歡迎的圖片,後臺開始讀sqlite數據庫,如果沒讀到用戶信息,動態加載另一個xml(登陸表單)進來讓用戶輸入。輸入後點擊登錄,與openfire服務器端建立連接進行驗證,如果登陸成功,則將用戶信息存入數據庫。如果在開始能夠讀到用戶信息,則不會加載登陸窗口,用該信息完成自動登錄。登陸成功後均進入用戶界面。之後可以進行註銷用戶的操作,點擊“註銷後”,從數據庫中刪除用戶信息,設置用戶狀態為下線,斷開客戶端與服務器的連接。

 

目前的目錄結構是這樣的。。。命名太水,以後類一多,肯定又是傻傻找不到東西的節奏。。。

 

 

 

 

目前的六個包分別是放適配器,activity,application類,連服務器代碼,一些工具類,junitest測試類。

 

sqlite之前學習過瞭,項目中對sql操作都封裝過,比較方便瞭,今天主要還是寫smack相關。

 

主要的變量我都放在application類中瞭,方便引用。首先是配置XMPPservices

 

復制代碼

    public XMPPConnection XMPPservices(){

        if(connection==null){

        ConnectionConfiguration config;

        config = new ConnectionConfiguration(IP,PORT); 

        /** 是否啟用安全驗證 */  

        config.setSASLAuthenticationEnabled(false);  

        config.setSecurityMode(ConnectionConfiguration.SecurityMode.disabled);  

        /** 是否啟用調試 */  

        //config.setDebuggerEnabled(true);  

        return connection = new XMPPConnection(config); 

        }

        else return connection;

    }

復制代碼

關於一些XMPP連接,登陸,註銷的方法,封裝到類裡瞭

 

復制代碼

public class ClientConService {

 

    XMPPConnection connection;

    public ClientConService(){}

    public ClientConService(XMPPConnection connection){

        this.connection = connection;

    }

    public boolean login(String user, String password) {

        

 

        try {  

            /** 建立連接 */  

            connection.connect();  

            /** 登錄*/   

            connection.login(user, password);   

            return true;  

        } catch (Exception e) { 

            e.printStackTrace();  

            return false;

        }  

    }

    public boolean disconnectAccount()    

    {

        try {

            //這裡需要先將登陸狀態改變為“離線”,再斷開連接,不然在後臺還是上線的狀態

            Presence presence = new Presence(Presence.Type.unavailable);  

            connection.sendPacket(presence);

            connection.disconnect();

            return true;    

        } catch (Exception e) {

            e.printStackTrace();

            return false;    

        }    

    } 

}

發佈留言