在代碼中掙扎的死去活來,還是需要把有用的東西記下來,以后慢慢品味。
每次寫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; } } }
剩下的代碼,就是點擊事件啦,加載xml啦,比較簡單就不貼了,下面是效果
歡迎界面,輸入賬戶
點擊登陸,登陸成功
點擊注銷,數據庫刪除用戶數據,跳回歡迎界面,檢驗無用戶信息,加載登陸表單
重新登陸后退出,第二次進入時數據庫發現用戶信息,用該信息登陸,不再加載登陸表單。
目前對於smack的學習只進行到這 = = (我前天開始看的)所以,之后再編再寫更多功能,當然最主要的功能還沒實現啊,先是文字的即時通訊,然后設想就是用一些插件完成對文件的即時傳輸,這樣就可以做類似微信的功能了~想想還是比較心動啊,不過一切都還是設想,現在還是過於才疏學淺了,努力吧!做出新功能了再更新。
對了,這是俺在博客園發的第一篇文章,歡迎各位大神批評指教!