[開(kāi)題報(bào)告+論文+源碼]基于Android仿QQ聊天系統(tǒng)
[開(kāi)題報(bào)告+論文+源碼]基于Android仿QQ聊天系統(tǒng)

科大云炬
xxxxxx
畢業(yè)設(shè)計(jì)(論文)開(kāi)題報(bào)告
系 軟件工程 專業(yè)
課題名稱: 基于Android的網(wǎng)絡(luò)聊天軟件的設(shè)計(jì)與實(shí)現(xiàn)
學(xué)生姓名:
學(xué) 號(hào):
指導(dǎo)教師:
報(bào)告日期:
1.本課題所涉及的問(wèn)題在國(guó)內(nèi)(外)的研究現(xiàn)狀綜述 隨著科技的發(fā)展手機(jī)作為一種非常重要的通訊工具,其功能越來(lái)越強(qiáng)大,相對(duì)于電視、互聯(lián)網(wǎng)等方式。手機(jī)憑借它可以隨時(shí)隨地獲取和處理信息的優(yōu)勢(shì),逐漸成為人們獲取信息的一種重要手段。但是實(shí)際上并不是所有手機(jī)都可以滿足人們這種“復(fù)雜”的功能要求,而智能手機(jī)由于其強(qiáng)大的功能無(wú)疑是所有手機(jī)中最好的選擇。根據(jù)采用的的操作系統(tǒng)不同,市場(chǎng)上智能機(jī)可以分為多類,例如Symbian、Windows、Mobile、Linux、Palm等等。近兩年來(lái)由于Android操作系統(tǒng)具有良好的開(kāi)放性和平臺(tái)開(kāi)的便捷性等特點(diǎn),采用Android操作系統(tǒng)手機(jī)越來(lái)越受到人們的青睞。同時(shí)Android操作系統(tǒng)在智能手機(jī)領(lǐng)域中所扮演的角色也越來(lái)越重要。Android一詞的本義指“機(jī)器人”,也就是基于Linux內(nèi)核的軟件平臺(tái)和操作系統(tǒng),是一個(gè)智能手機(jī)及便攜設(shè)備操作系統(tǒng)。由Google(谷歌)在2007年推出,并迅速成為智能手機(jī)的主流操作系統(tǒng)。Android平臺(tái)手機(jī)5大優(yōu)勢(shì) (1)開(kāi)放性:開(kāi)發(fā)的平臺(tái)允許任何移動(dòng)終端廠商加入到Android聯(lián)盟中來(lái)。而對(duì)于消費(fèi)者來(lái)講,最大的受益正是豐富的軟件資源。消費(fèi)者將可用更低的價(jià)位購(gòu)得心儀的手機(jī)。(2)掙脫運(yùn)營(yíng)商的束縛:用戶可更加方便地連接網(wǎng)絡(luò),運(yùn)營(yíng)商的制約減少,手機(jī)可隨意接入網(wǎng)絡(luò)。(3)豐富的硬件選擇:由于Android的開(kāi)放性,眾多的廠商會(huì)推出功能特色各具的多種產(chǎn)品。功能上的差異和特色,卻不會(huì)影響到數(shù)據(jù)同步、甚至軟件的兼容(4)不受任何限制的開(kāi)發(fā)商:Android給第三方開(kāi)發(fā)商一個(gè)十分寬泛、自由的環(huán)境,不受到各種條條框框的阻擾(5)無(wú)縫結(jié)合的Google應(yīng)用:Google已走過(guò)10年歷史,從搜索巨人到全面的互聯(lián)網(wǎng)滲透,Google服務(wù)如地圖、郵件、搜索等已成為連接用戶和互聯(lián)網(wǎng)的重要紐帶,而Android平臺(tái)手機(jī)將無(wú)縫結(jié)合這些優(yōu)秀的Google服務(wù)。2.本人對(duì)課題任務(wù)書(shū)提出的任務(wù)要求及實(shí)現(xiàn)預(yù)期目標(biāo)的可行性分析 根據(jù)課題任務(wù)書(shū)以及相關(guān)需求,基于Android的網(wǎng)絡(luò)聊天軟件的設(shè)計(jì)與實(shí)現(xiàn)的目標(biāo)如下(1)客戶端基于Android平臺(tái),服務(wù)端基于Windonws平臺(tái)。(2)客戶端和服務(wù)器的通信基于TCP協(xié)議。 (3) 采用客戶機(jī)/服務(wù)器(C/S)結(jié)構(gòu),客戶端連接到服務(wù)器通過(guò)服務(wù)器轉(zhuǎn)發(fā)實(shí)現(xiàn)外網(wǎng)聊天。 (4) 客戶端通過(guò)與服務(wù)器通信獲得在線好友列表等信息??偨Y(jié)上述基于Android的網(wǎng)絡(luò)聊天軟件,實(shí)現(xiàn)可行性分析主要包括兩個(gè)方面:技術(shù)可行性、操作可行性。 首先,技術(shù)可行性可以分為客戶端和服務(wù)器。 客戶端技術(shù)具體要求:Android界面Xml布局,SQLIte數(shù)據(jù)庫(kù)的增刪改查,Xml文件的解析,Socket通信。 服務(wù)器端技術(shù)具體要求:數(shù)據(jù)的接受和轉(zhuǎn)發(fā),MySql數(shù)據(jù)庫(kù)的增刪改查。 其次,本軟件的客戶端秉承Android的一貫風(fēng)格——界面?zhèn)€性化程度高,采用滑動(dòng),觸摸等方式增加了軟件的可玩性。3.本課題需要重點(diǎn)研究的、關(guān)鍵的問(wèn)題及解決的思路 Android聊天軟件是完成好友任意時(shí)間點(diǎn)上一對(duì)一的即時(shí)(文本)通信,有著簡(jiǎn)單操作方便、界面友好等特點(diǎn)。所以課題研究的關(guān)鍵問(wèn)題有:(1)基于TCP的消息發(fā)送與接收。(2)客戶端界面的個(gè)性化與操作簡(jiǎn)便。針對(duì)以上問(wèn)題解決方法如下:(1)使用Socket套接字以及線程實(shí)現(xiàn)實(shí)現(xiàn)消息的發(fā)送和接受——當(dāng)客戶端通過(guò)服務(wù)器的驗(yàn)證,服務(wù)器將保留該客戶端對(duì)應(yīng)的Socket套接字,并創(chuàng)建一個(gè)線程用于管理該套接字。(2)借鑒以往聊天軟件的成功方式,同時(shí)結(jié)合Android特有的個(gè)性化界面的SDK實(shí)現(xiàn)4.完成本課題所必須的工作條件(如工具書(shū)、實(shí)驗(yàn)設(shè)備或?qū)嶒?yàn)環(huán)境條件、某類市場(chǎng)調(diào)研、計(jì)算機(jī)輔助設(shè)計(jì)條件等等)及解決的辦法 根據(jù)課題要求系統(tǒng)應(yīng)當(dāng)利用Eclipse開(kāi)發(fā)工具,結(jié)合MySQL數(shù)據(jù)庫(kù),采用C/S架構(gòu)。因此該網(wǎng)站具體開(kāi)發(fā)環(huán)境及工具如下:開(kāi)發(fā)環(huán)境:Windows XP Professional(以上版本) Android SDK 2.3(以上版本)開(kāi)發(fā)工具包:JDK Version 1.6數(shù)據(jù)庫(kù)工具:MySQL Server 5.0、SQLite編譯器:Eclipse 3.5解決方案:通過(guò)在個(gè)人計(jì)算機(jī)上安裝所需工具軟件,并且完成相應(yīng)環(huán)境變量配置,從而完成整個(gè)工作環(huán)境的搭建參考文獻(xiàn)及相關(guān)資料:[1]楊豐盛.Android應(yīng)用開(kāi)發(fā)揭秘[M].北京:機(jī)械工業(yè)出版社 2010.[2]朱麗平.UML面向?qū)ο笤O(shè)計(jì)與分析[M].北京:清華大學(xué)出版社,2007[3]馬志強(qiáng).基于Android平臺(tái)即時(shí)通信系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)[D].北京:北京交通大學(xué),2009[4]謝希仁.計(jì)算機(jī)網(wǎng)絡(luò)(第五版)[M].北京:電子工業(yè)出版社,2009.[5]王小東.高性能MySQL[M].北京:電子工業(yè)出版社,2010.5.完成本課題的工作方案及進(jìn)度計(jì)劃第1周 問(wèn)題定義、可行性研究第2~3周 需求分析第4~5周 總體設(shè)計(jì)第6~7周 開(kāi)始撰寫畢業(yè)論文,詳細(xì)設(shè)計(jì)第7~10周 撰寫畢業(yè)論文,上機(jī)編碼、系統(tǒng)調(diào)試和測(cè)試第11~12周 完成畢業(yè)論文第13~14周 論文審核、修改、論文答辯第15~16周 論文修改、成績(jī)?cè)u(píng)定、裝訂、歸檔工作方案:根據(jù)題目的功能要求,在設(shè)計(jì)和實(shí)現(xiàn)本系統(tǒng)時(shí),首先完成服務(wù)器端的設(shè)計(jì),為Android手機(jī)端的測(cè)試做好準(zhǔn)備;再實(shí)現(xiàn)手機(jī)終端的應(yīng)用,通過(guò)手機(jī)能夠訪問(wèn)到遠(yuǎn)端服務(wù)器上的數(shù)據(jù)信息,最后進(jìn)行系統(tǒng)整合和整體測(cè)試。6.指導(dǎo)教師審閱意見(jiàn) 通過(guò)本開(kāi)題報(bào)告,可以看出該生對(duì)本課題的相關(guān)內(nèi)容進(jìn)行了一定的研究,報(bào)告中的內(nèi)容與主題相關(guān)的內(nèi)容比較多,證明研究課題時(shí)比較細(xì)致,對(duì)相關(guān)知識(shí)的學(xué)習(xí)也比較扎實(shí),但根據(jù)該題目要求,系統(tǒng)的UI設(shè)計(jì)工作需要仔細(xì)考慮一下,還需這方面做好知識(shí)的補(bǔ)充,綜上所述,該生已經(jīng)基本具備了完成本課題的理論能力,希望能按照進(jìn)度要求,按時(shí)完成畢業(yè)設(shè)計(jì),同意開(kāi)題!指導(dǎo)教師(簽字): 年 月 日7.系畢業(yè)設(shè)計(jì)(論文)工作領(lǐng)導(dǎo)小組評(píng)審意見(jiàn) 領(lǐng)導(dǎo)小組組長(zhǎng)(簽字): 系(簽章) 年 月 日
說(shuō)明:
本報(bào)告必須由承擔(dān)畢業(yè)設(shè)計(jì)(論文)課題任務(wù)的學(xué)生在接到“畢業(yè)設(shè)計(jì)(論文)任務(wù)書(shū)”、正式開(kāi)始做畢業(yè)設(shè)計(jì)(論文)的第2周或第3周末之前獨(dú)立撰寫完成,并交指導(dǎo)教師審閱。
每個(gè)畢業(yè)設(shè)計(jì)(論文)課題撰寫本報(bào)告一份,作為指導(dǎo)教師、畢業(yè)設(shè)計(jì)(論文)指導(dǎo)小組審查學(xué)生能否承擔(dān)該畢業(yè)設(shè)計(jì)(論文)課題任務(wù)的依據(jù),并接受學(xué)校的抽查。
XXXX
本科生畢業(yè)設(shè)計(jì)(論文)
學(xué)院(系): XX
專 業(yè): XX
學(xué) 生: XX
指導(dǎo)教師: XX
完成日期 年 月
XXX本科生畢業(yè)設(shè)計(jì)(論文)
基于Android的網(wǎng)絡(luò)聊天軟件的設(shè)計(jì)與實(shí)現(xiàn)
Design and Implementation of the Network Chatting Software
based on the Android
總 計(jì):畢業(yè)設(shè)計(jì)(論文) 30頁(yè)
表 格: 4個(gè)
圖 片: 28個(gè)
XXX 業(yè) 設(shè) 計(jì)(論文)
基于Android的網(wǎng)絡(luò)聊天軟件的設(shè)計(jì)與實(shí)現(xiàn)
Design and Implementation of the Network Chatting Software
based on the Android
學(xué) 院(系): XX
專 業(yè): XX
學(xué) 生 姓 名: XX
學(xué) 號(hào): XX
指導(dǎo)教師(職稱): XX
評(píng) 閱 教 師: XX
完 成 日 期:
南陽(yáng)理工學(xué)院
Nanyang Institute of Technology
基于Android的聊天網(wǎng)絡(luò)軟件的設(shè)計(jì)與實(shí)現(xiàn)
軟件工程 XX
即時(shí)通信(Instant Messaging,IM)軟件產(chǎn)生以來(lái),這種通過(guò)網(wǎng)絡(luò)與其它在線用戶進(jìn)行交流的方式,受到了個(gè)人公司以及行業(yè)的青睞。本文采用軟件工程的管理和設(shè)計(jì)方法,對(duì)項(xiàng)目的需求進(jìn)行了分析,完成了功能用例建模,使用Socket通信技術(shù)結(jié)合TCP/IP協(xié)議原理實(shí)現(xiàn)了基于Android操作系統(tǒng)的聊天軟件各個(gè)模塊的分析設(shè)計(jì),提出了系統(tǒng)的體系結(jié)構(gòu)和整體架構(gòu)設(shè)計(jì)方案,并予以實(shí)現(xiàn),取得了較好的使用價(jià)值。
Android;即時(shí)聊天;客戶端/服務(wù)器模型;套接;
Design and Implementation of the Network Chatting Software
based on the Android
Software Engineering MajorXX
Since the invention of instant messaging (IM), such style which online users communicate with others on the net, has become more and more welcomed by individual, company and software industry. This paper using the software engineering management and design methods to analyze the requirement of project, and implement the construction of function model. With the socket communication technology combined with the TCP/IP protocol finished all of the modules in chat software which runs in Android Operation. Propose and carry out the system architecture and overall architecture design, get a good value in use.
Android; Instant Messaging; IM; C/S; Socket;
目 錄
1 緒論11
1.1 項(xiàng)目背景11
1.2 研究的目的和意義11
1.3 國(guó)內(nèi)外研究的現(xiàn)狀11
1.4 論文的主要內(nèi)容和組織結(jié)構(gòu)22
1.5 本章小結(jié)22
2 關(guān)鍵技術(shù)介紹22
2.1 Android平臺(tái)22
2.1.1 Android特征22
2.1.2 Android體系結(jié)構(gòu)33
2.2 TCP/IP協(xié)議44
2.2.1 C/S模型44
2.2.2 TCP協(xié)議44
2.2.3 Android的MVC架構(gòu)55
2.3 多線程技術(shù)66
2.4 運(yùn)行環(huán)境66
2.5 本章小結(jié)77
3 需求分析77
3.1 系統(tǒng)的整體分析77
3.1.1 服務(wù)器端88
3.1.2 客戶端88
3.2 可行性分析99
3.3 本章小結(jié)99
4 Android聊天軟件系統(tǒng)設(shè)計(jì)99
4.1 系統(tǒng)實(shí)現(xiàn)原理1010
4.2 服務(wù)器端1111
4.2.1 用戶登錄驗(yàn)證模塊1111
4.2.2 信息的轉(zhuǎn)發(fā)模塊1111
4.2.3 刷新好友列表模塊1212
4.3 客戶端1212
4.3.1 用戶登錄模塊1212
4.3.2 用戶交互模塊1212
4.3.3 用戶注冊(cè)模塊1313
4.3.4 用戶設(shè)置模塊1313
4.3.5 用戶注銷模塊1414
4.4 Android聊天軟件用戶存儲(chǔ)數(shù)據(jù)庫(kù)的設(shè)計(jì)1414
4.4.1 SQLite 簡(jiǎn)介1414
4.4.2 數(shù)據(jù)庫(kù)設(shè)計(jì)1414
4.5 本章小結(jié)1414
5 Android聊天軟件的實(shí)現(xiàn)1414
5.1 數(shù)據(jù)傳輸?shù)膶?shí)現(xiàn)1414
5.2 服務(wù)器端的實(shí)現(xiàn)1414
5.2.1 用戶登錄的實(shí)現(xiàn)1414
5.2.2 用戶退出1414
5.2.3 更新好友列表1414
5.3 客戶端代碼的實(shí)現(xiàn)1414
5.4 客戶端UI實(shí)現(xiàn)1414
5.4.1 半透明懸浮窗口的實(shí)現(xiàn)1414
5.4.2 主界面左右滑動(dòng)切換的實(shí)現(xiàn)1414
5.5 本章小結(jié)1414
6 系統(tǒng)演示與運(yùn)行1414
6.1 用戶登錄演示1414
6.2 用戶注冊(cè)演示1414
6.3 主界面演示1414
6.4 聊天界面的演示1414
6.5 本章小結(jié)1414
結(jié)束語(yǔ)1414
參考文獻(xiàn)1414
致謝1414
緒論
項(xiàng)目背景
即時(shí)通信(Instant Messaging, IM)是隨著互聯(lián)網(wǎng)的出現(xiàn)而新型通信手段,根據(jù)通訊軟件的發(fā)展與分析,作為即時(shí)通信工具中最具有增長(zhǎng)潛力之一的聊天軟件,它為滿足人們的需要,將其功能不斷的完善,不但可以文字聊天和文件傳輸,還可以通過(guò)語(yǔ)音,視頻來(lái)聊天,所以其發(fā)展十分迅速。而隨著3G時(shí)代的來(lái)臨,其與移動(dòng)客戶終端的結(jié)合更受到了廣泛的關(guān)注。本項(xiàng)目來(lái)自以下當(dāng)前受到關(guān)注的啟發(fā)。開(kāi)放性移動(dòng)設(shè)備Android平臺(tái)目前受到了很多人的喜愛(ài),并且在短短幾年取代了諾基亞成為全球最熱銷的手機(jī)。
隨著手機(jī)成為人們?nèi)粘I畹谋匦杵?,通過(guò)PC端進(jìn)行即時(shí)聊天已經(jīng)不能滿足人們的需求,人們需求多終端的聊天即手機(jī)和PC的互通。
本系統(tǒng)通過(guò)Socket通信實(shí)現(xiàn)Android手機(jī)間互通,Android手機(jī)和PC端的互通。
研究的目的和意義
即時(shí)通信軟件作為一種便捷的網(wǎng)絡(luò)通信技術(shù)已經(jīng)越來(lái)越深入人心,應(yīng)用范圍從單純的網(wǎng)絡(luò)聊天工具變成工作生活所不可缺的信息交流平臺(tái)。在互聯(lián)網(wǎng)日益普及的今天,即時(shí)通信的用戶規(guī)模也呈現(xiàn)出快速增長(zhǎng)的態(tài)勢(shì)。
現(xiàn)階段,通過(guò)手持設(shè)備終端和即時(shí)通信軟件掛鉤,把以往的只能應(yīng)用在PC機(jī)上的即時(shí)通信軟件移植到移動(dòng)設(shè)備中,讓用戶能夠更方便地應(yīng)用即時(shí)通信產(chǎn)品,是即時(shí)通信的發(fā)展趨勢(shì),也是IM系統(tǒng)軟件市場(chǎng)發(fā)展的一個(gè)重要方向。國(guó)內(nèi)外研究的現(xiàn)狀
1996年11月ICQ在全球發(fā)布,拉開(kāi)了IM(Instant Messaging,即時(shí)通信)應(yīng)用的序幕。就是這樣一款小軟件在短短數(shù)年時(shí)間里發(fā)展出了一個(gè)巨大的IM產(chǎn)業(yè)。
時(shí)至今日,即時(shí)通信工具早已成為最熱門的網(wǎng)絡(luò)應(yīng)用之一。國(guó)外除了ICQ外還有雅虎的雅虎通、微軟的MSN、被eBay收購(gòu)的Skype和Google的Gtalk都在國(guó)際上占有不小比重。
相較于國(guó)內(nèi),騰訊QQ無(wú)疑是國(guó)內(nèi)即時(shí)通信市場(chǎng)的霸主,自從99年進(jìn)入即時(shí)通訊領(lǐng)域并迅速占市場(chǎng)之后,其在國(guó)內(nèi)用戶數(shù)量始終高居榜首,即使面對(duì)微軟MSN的強(qiáng)大攻勢(shì),騰訊QQ的市場(chǎng)占有率依然穩(wěn)步增長(zhǎng),到現(xiàn)在占據(jù)市場(chǎng)70%以上份額。除了騰訊以外,國(guó)內(nèi)的IM還有Lava,UC等軟件。論文的主要內(nèi)容和組織結(jié)構(gòu)
本文的研究工作是設(shè)計(jì)和實(shí)現(xiàn)一個(gè)Android平臺(tái)的即時(shí)通信系統(tǒng),實(shí)現(xiàn)移動(dòng)設(shè)備與PC終端的互通。采用TCP/IP 協(xié)議,在Google推出的Android平臺(tái)下進(jìn)行研究工作。本文的研究?jī)?nèi)容主要有下面幾方面:
1.Android平臺(tái)[1]上即時(shí)通信系統(tǒng)的架構(gòu):提出整個(gè)系統(tǒng)的合理架構(gòu)以實(shí)現(xiàn)整個(gè)系統(tǒng)。
2.TCP/IP協(xié)議:介紹TCP/IP協(xié)議的內(nèi)容并對(duì)協(xié)議進(jìn)行解析;
3.移動(dòng)即時(shí)通信系統(tǒng)的實(shí)現(xiàn):根據(jù)提出的系統(tǒng)架構(gòu),并闡述本移動(dòng)即時(shí)通信系統(tǒng)的設(shè)計(jì)和具體實(shí)現(xiàn),最終對(duì)系統(tǒng)進(jìn)行演示和運(yùn)行。
本文在第二章介紹項(xiàng)目所用到的基本知識(shí),對(duì)Android平臺(tái)、TCP/IP協(xié)議以及MVC架構(gòu)進(jìn)行介紹,討論在Android平臺(tái)下程序的開(kāi)發(fā)以及開(kāi)發(fā)所需的環(huán)境。
然后在第三章根據(jù)項(xiàng)目具體要求得出需求分析,依照畫(huà)出的用例模型將系統(tǒng)分為客戶端和服務(wù)器端。在第四章中詳細(xì)的闡述的具體的功能的流程和系統(tǒng)實(shí)現(xiàn)的原理。
第五章介紹了一些重要功能實(shí)現(xiàn)的代碼及解釋。
第六章為程序的演示和運(yùn)行。本章小結(jié)
本章主要介紹了項(xiàng)目的背景、研究的目的和意義以及國(guó)內(nèi)外實(shí)時(shí)聊天系統(tǒng)的研究和應(yīng)用現(xiàn)狀,同時(shí)列出來(lái)整篇文章的主要章節(jié)結(jié)構(gòu),為后續(xù)的部分介紹做出了提綱。
關(guān)鍵技術(shù)介紹
畢業(yè)設(shè)計(jì)是對(duì)四年學(xué)習(xí)內(nèi)容的一個(gè)綜合考驗(yàn),因此將會(huì)涉及到多門課程的知識(shí)。結(jié)合本課題的研究?jī)?nèi)容,本章將會(huì)把畢業(yè)設(shè)計(jì)過(guò)程中所遇到的關(guān)鍵技術(shù)進(jìn)行一個(gè)全方位的闡述。Android平臺(tái)
Android操作系統(tǒng)是由谷歌Google和開(kāi)放手機(jī)聯(lián)盟共同開(kāi)發(fā)發(fā)展的移動(dòng)設(shè)備操作系統(tǒng),其最早的一個(gè)發(fā)布版本開(kāi)始于2007年11月的Android 1.0 beta,并且已經(jīng)發(fā)布了多個(gè)更新版本的Android操作系統(tǒng)。
到2010年末數(shù)據(jù)顯示,僅正式推出兩年多操作系統(tǒng)的Android在市場(chǎng)占有率上已經(jīng)超越稱霸十年的諾基亞Symbian系統(tǒng)。2012年2月,Android操作系統(tǒng)在全球智能手機(jī)操作系統(tǒng)的市場(chǎng)份額已達(dá)52.5%,成為全球第一大智能手機(jī)操作系統(tǒng)[2]。Android特征
1.提供訪問(wèn)硬件的API函數(shù),簡(jiǎn)化像攝像頭、GPS等硬件的訪問(wèn)過(guò)程。
2.具有自己的運(yùn)行時(shí)和虛擬機(jī)。
3.提供豐富的界面控件供使用者之間調(diào)用,加快用戶界面的開(kāi)發(fā)速度,保證Android平臺(tái)上程序界面的一致性。
4.提供輕量級(jí)的進(jìn)程間通訊機(jī)制Intent,使跨進(jìn)程組件通信和發(fā)送系統(tǒng)級(jí)廣播成為可能。
5.提供了Service作為無(wú)用戶界面,長(zhǎng)時(shí)間后臺(tái)運(yùn)行的組件。
6.支持高效、快速的數(shù)據(jù)存儲(chǔ)方式 。Android體系結(jié)構(gòu)
采用軟件堆層的架構(gòu),共分為四層如下圖2-1[3]:
Linux 內(nèi)核
1.硬件和其他軟件堆層之間的一個(gè)抽象隔離層。
2.提供安全機(jī)制、內(nèi)存管理、進(jìn)程管理、網(wǎng)絡(luò)協(xié)議堆棧、和驅(qū)動(dòng)程序等。
中間件層
1.由函數(shù)庫(kù)和Android運(yùn)行時(shí)構(gòu)成。
應(yīng)用程序框架
1.Activity Manager,管理應(yīng)用程序的生命周期。
2.Windows Manager,啟動(dòng)應(yīng)用程序的窗體。
3.Content Provider,共享私有數(shù)據(jù),實(shí)現(xiàn)跨進(jìn)程的數(shù)據(jù)訪問(wèn)。
4.Package Manager,管理安裝在Android系統(tǒng)內(nèi)的應(yīng)用程序。
圖2-1 Android的體系結(jié)構(gòu)圖
5.Teleghony Manager,管理與撥打和接聽(tīng)電話的相關(guān)功能。
6.Resource Manager,允許應(yīng)用程序使用非代碼資源。
7.Location Manager,管理與地圖相關(guān)的服務(wù)功能。
8.Notification Manager,允許應(yīng)用程序在狀態(tài)欄中顯示提示信息。
應(yīng)用程序
1.提供一系列的核心應(yīng)用程序。
2.包括電子郵件客戶端、瀏覽器、通訊錄和日歷等。
TCP/IP協(xié)議
TCP協(xié)議是網(wǎng)絡(luò)通信的基礎(chǔ)核心協(xié)議,在Java中也專門提供了Socket的類庫(kù),抽象出了基于TCP協(xié)議通信的常用方法:TCP協(xié)議與三次握手。本節(jié)在講述TCP協(xié)議流程前,先來(lái)要對(duì)一些概念進(jìn)行說(shuō)明。C/S模型
在網(wǎng)絡(luò)連接模式中,除了等網(wǎng)外,還有一種形式的網(wǎng)絡(luò),即客戶機(jī)/服務(wù)器網(wǎng)絡(luò)。在該模型中,服務(wù)器是網(wǎng)絡(luò)的核心,而客戶機(jī)是網(wǎng)絡(luò)的基礎(chǔ),客戶機(jī)依靠服務(wù)器獲得所需的網(wǎng)絡(luò)資源,而服務(wù)器為客戶機(jī)提供網(wǎng)絡(luò)必須的資源。通過(guò)C/S模型可以從分利用兩端硬件環(huán)境的優(yōu)勢(shì),將任務(wù)合理分配到客戶端和服務(wù)器端來(lái)實(shí)現(xiàn),所以C/S模式具有以下幾個(gè)優(yōu)點(diǎn):因?yàn)樵诳蛻舳松嫌幸惶淄暾南到y(tǒng)軟件,具有很強(qiáng)的交互性,系統(tǒng)工作人員在運(yùn)用系統(tǒng)時(shí)可以獲得出錯(cuò)提示、在線幫助等較強(qiáng)功能;
由于C/S模式是配對(duì)的點(diǎn)對(duì)點(diǎn)的結(jié)構(gòu)模式,因此多采用局域網(wǎng)的協(xié)議,并且通常是學(xué)校內(nèi)部固定的從事學(xué)生學(xué)籍管理工作的用戶群,所以安全性較高;
因?yàn)镃/S模式只有兩層邏輯結(jié)構(gòu),因此網(wǎng)絡(luò)通訊量低,傳輸速度快,占用網(wǎng)絡(luò)資源少。
隨著Android手機(jī)性能的不斷提升,使用C/S架構(gòu)將一些需要較長(zhǎng)時(shí)間處理的功能放置到客戶端。使用戶得到更好的網(wǎng)絡(luò)傳輸,提升用戶體驗(yàn)。
TCP協(xié)議
為了實(shí)現(xiàn)客戶端同服務(wù)器端的通信,客戶端首先發(fā)送一個(gè)“SYN”數(shù)據(jù)包。如果服務(wù)器收到SYN標(biāo)記,它將發(fā)回一個(gè)“SYN+ACK”數(shù)據(jù)包。接著,客戶端為了表示收到了這個(gè)SYN+ACK信息,會(huì)向服務(wù)器發(fā)送一個(gè)最終確認(rèn)信息(ACK包)。這種SYN,SYN+ACK,ACK的步驟被稱為TCP連接建立時(shí)的“三次握手”,在這之后,連接就建立起來(lái)了,這個(gè)連接將一直保持活動(dòng)狀態(tài),直到超時(shí)或者任何一方發(fā)出一個(gè)FIN(結(jié)束)信號(hào)。這種通信模式也叫客戶端/服務(wù)器(C/S)模式 如下圖2-2 TCP的三次握手。
由此可見(jiàn),通過(guò)客戶端和服務(wù)器的“三次握手”,雙方可以建立暢通的通信信道,在此信道上雙方互相傳輸數(shù)據(jù)。

圖2-2 TCP的三次握手
由于TCP/IP協(xié)議能夠保證數(shù)據(jù)的安全傳輸和正確到達(dá)目標(biāo)主機(jī),本文所涉及到聊天系統(tǒng)采用TCP/IP協(xié)議,從而能夠?qū)崿F(xiàn)更加精確即時(shí)的消息發(fā)送和接受。
Android的MVC架構(gòu)
在系統(tǒng)客戶端中,采用MVC模式的設(shè)計(jì)思想,提高了程序的模塊化程度。在本系統(tǒng)客戶端中,結(jié)構(gòu)圖如下:

圖2-3 Android MVC架構(gòu)
視圖層(View)
視圖提供界面功能顯示的機(jī)制,主要是用戶數(shù)據(jù)的輸入界面和對(duì)模型數(shù)據(jù)的顯示功能,同時(shí)也包括信息的提示功能。這方面主要是引入了Xml配置文件其中包括樣式布局文件(Style)、動(dòng)畫(huà)效果布局文件(anim文件夾下)、圖片布局文件(drawable文件夾下)。
控制層(Control)
主要負(fù)責(zé)對(duì)整個(gè)系統(tǒng)的流程進(jìn)行調(diào)度,管理用戶界面的邏輯流程,以及用戶交互如何影響數(shù)據(jù)模型和數(shù)據(jù)模型如何影響用戶交互過(guò)程這些東西都是有Android中的Activity完成的,在Android開(kāi)發(fā)中,其配置文件AndroidManifest.xml扮演控制器的角色,文件中對(duì)各種組件視圖進(jìn)行相應(yīng)的配置,以供模型在改變時(shí)對(duì)視圖的調(diào)用。
模型層(Model)
主要對(duì)數(shù)據(jù)庫(kù)的增、刪、改、查等操作。同時(shí)包含了信息的接受,發(fā)送,請(qǐng)求的提交。具體到在程序中是通過(guò)Service實(shí)現(xiàn)數(shù)據(jù)的發(fā)送,接受。當(dāng)一個(gè)Activity啟動(dòng)后動(dòng)態(tài)的調(diào)用bindService函數(shù)將其與Service綁定,關(guān)于這一塊后面會(huì)詳細(xì)解釋。
多線程技術(shù)
多線程在構(gòu)建大型系統(tǒng)的時(shí)候是需要重點(diǎn)關(guān)注的一個(gè)重要方面,特別是在效率和性能之間做一個(gè)權(quán)衡的時(shí)候。恰當(dāng)?shù)氖褂枚嗑€程可以極大的提高系統(tǒng)性能。使用多線程的好處有以下幾點(diǎn):使用線程可以把占據(jù)長(zhǎng)時(shí)間的程序中的任務(wù)放到后臺(tái)去處理;
用戶界面可以更加吸引人,這樣比如用戶點(diǎn)擊了一個(gè)按鈕去觸發(fā)某些事件的處理,可以彈出一個(gè)進(jìn)度條來(lái)顯示處理的進(jìn)度;
程序的運(yùn)行速度可能加快;
在一些等待的任務(wù)實(shí)現(xiàn)上如用戶輸入、文件讀寫和網(wǎng)絡(luò)收發(fā)數(shù)據(jù)等,線程就比較有用了。在這種情況下我們可以釋放一些珍貴的資源如內(nèi)存占用等等。
而Java是一種多線程的語(yǔ)言,它可以同時(shí)運(yùn)行多個(gè)線程處理多個(gè)任務(wù)。同時(shí)Java內(nèi)置多線程控制,這樣可大大簡(jiǎn)化多線程應(yīng)用程序的開(kāi)發(fā)。提供了一個(gè)Thread類,它封裝了所有有關(guān)線程的控制,負(fù)責(zé)線程的啟動(dòng)、運(yùn)行、休眠、掛起、恢復(fù)、退出和終止等一系列邏輯控制操作,并可檢查線程的狀態(tài)。此外Thread類還實(shí)現(xiàn)了對(duì)線程行為的優(yōu)先級(jí)的控制。
運(yùn)行環(huán)境
操作系統(tǒng):Windows XP 或者 Windows 7
數(shù)據(jù)庫(kù):SQLite(Android提供的一個(gè)標(biāo)準(zhǔn)的數(shù)據(jù)庫(kù),支持SQL語(yǔ)句),MySQL 5.0。
Android 版本:Android 2.2
開(kāi)發(fā)工具:eclipse+android SDK+MySQL5.0
本章小結(jié)
本章主要介紹了Android聊天軟件在開(kāi)發(fā)過(guò)程中用到的關(guān)鍵技術(shù),包括Android系統(tǒng)的體系結(jié)構(gòu)、C/S模型、TCP協(xié)議以及多線程技術(shù)。同時(shí)介紹了軟件開(kāi)發(fā)的硬件和軟件環(huán)境。
需求分析
上章介紹了本系統(tǒng)所需要的軟硬件配置以及關(guān)鍵技術(shù)。本章將開(kāi)始著重分析系統(tǒng)的需求,從系統(tǒng)功能和可行性分析兩個(gè)方面明確系統(tǒng)所要實(shí)現(xiàn)的目標(biāo),為系統(tǒng)的開(kāi)發(fā)做好鋪墊。系統(tǒng)的整體分析
本項(xiàng)目根據(jù)用戶的需求,對(duì)即時(shí)通信的常用功能進(jìn)行實(shí)現(xiàn),系統(tǒng)的功能用例圖如下3-1系統(tǒng)用例圖

圖3-1系統(tǒng)用例圖
通過(guò)用例圖可以知道,系統(tǒng)的主要實(shí)現(xiàn)功能大體上可以分成:
1.用戶注冊(cè):用戶如果沒(méi)有可用的ID,可填寫相關(guān)的個(gè)人信息(要注冊(cè)的ID、密碼等)進(jìn)行注冊(cè),向服務(wù)器提交后服務(wù)器返回相應(yīng)的信息。
2.用戶登錄:用戶名和密碼進(jìn)行登錄即時(shí)通信系統(tǒng)。
3.用戶設(shè)置:可對(duì)用戶的基本信息和一些系統(tǒng)選項(xiàng)進(jìn)行設(shè)置。
4.查看好友信息:登錄成功后,可以按照分組查看所有的好友概要信息(用戶名、
用戶ID),并可以查看某個(gè)好友的詳細(xì)信息。
5.用戶添加、刪除好友:根據(jù)其它用戶的ID添加進(jìn)自己的好友至好友列表。
6.用戶向好友發(fā)送信息:用戶登錄成功后可給某位好友發(fā)送信息,如果好友不在
系統(tǒng)將提示該好友不在。
7.用戶接收好友的信息:用戶登錄成功后會(huì)監(jiān)聽(tīng)好友發(fā)送過(guò)來(lái)的信息,并顯示在
相應(yīng)的界面上。
8.用戶注銷:用戶注銷,退出本系統(tǒng)。
系統(tǒng)采用C/S架構(gòu)模式,所以在進(jìn)一步細(xì)化過(guò)程中將系統(tǒng)分為服務(wù)器端和客戶端兩部分。
服務(wù)器端
在C/S架構(gòu)中,服務(wù)器端起到了連接客戶端并且處理客戶端請(qǐng)求的作用。服務(wù)器的功能模塊圖如下圖 3-2,該部分的功能需求主要實(shí)現(xiàn)功能有:用戶登錄驗(yàn)證:將用戶提交的賬號(hào)和密碼在服務(wù)器端驗(yàn)證。
信息的轉(zhuǎn)發(fā):通過(guò)服務(wù)器將用戶的信息轉(zhuǎn)發(fā)給其他用戶。
刷新在線好友:接到用戶的信息后返回該用戶的在線好友信息。

圖3-2服務(wù)器功能模塊圖
客戶端
在C/S架構(gòu)中客戶端是核心部分,是該網(wǎng)絡(luò)基本通信模型??蛻舳送ㄟ^(guò)服務(wù)器獲得所需的信息,所以客戶端的功能模塊圖如下圖3-3所示。其相應(yīng)的功能解釋已經(jīng)在上面的系統(tǒng)用例圖中解釋過(guò),這里不再累述。

圖3-3客戶端功能模塊圖
可行性分析
從技術(shù)方面將本系統(tǒng)的開(kāi)發(fā)利用MySQL5.0作為本系統(tǒng)的數(shù)據(jù)庫(kù),它是一個(gè)支持多用戶的新型數(shù)據(jù)庫(kù),適用于中小規(guī)模的數(shù)據(jù)量需求。使用Java作為系統(tǒng)開(kāi)發(fā)的開(kāi)發(fā)環(huán)境,它提供完善的指令控制語(yǔ)句、類與對(duì)象的支持及豐富的數(shù)據(jù)類型,給開(kāi)發(fā)高性能系統(tǒng)提供的保障為開(kāi)發(fā)滿足客戶要求的系統(tǒng),保證了代碼的模塊化要求,而代碼模塊化的提高,非常有利于以后對(duì)新系統(tǒng)的擴(kuò)展與修改。
從運(yùn)行方面將本系統(tǒng)為一個(gè)小型的聊天系統(tǒng),所耗費(fèi)的資源非常的小,現(xiàn)在一般的Android手機(jī)無(wú)論是硬件還是軟件都能夠滿足條件,因此,本系統(tǒng)在運(yùn)行上是可行的。
經(jīng)過(guò)了對(duì)Android平臺(tái)聊天客戶端的詳細(xì)分析.可以確定在Android平臺(tái)上對(duì)基于TCP/IP協(xié)議的客戶端開(kāi)發(fā)從技術(shù)上和運(yùn)行方面來(lái)說(shuō)是可以實(shí)現(xiàn)的。本章小結(jié)
本章主要明確了需求分析,根據(jù)C/S模型將系統(tǒng)分為服務(wù)器端和客戶端。再通過(guò)對(duì)系統(tǒng)的進(jìn)一步分析后,得到了服務(wù)器端和客戶端的功能模塊圖。同時(shí)從技術(shù)和運(yùn)行兩方面論述了Android聊天軟件的可行性分析。
Android聊天軟件系統(tǒng)設(shè)計(jì)
通過(guò)上一章需求分析得到(系統(tǒng)的運(yùn)行如圖4-1所示)系統(tǒng)的需求分析以及大致的設(shè)計(jì)方向,本章將會(huì)從系統(tǒng)實(shí)現(xiàn)原理、服務(wù)器端、客戶端與數(shù)據(jù)庫(kù)設(shè)計(jì)的幾個(gè)方面深層次的介紹系統(tǒng)所涉及的關(guān)鍵技術(shù),通過(guò)這些技術(shù)的實(shí)現(xiàn),系統(tǒng)的設(shè)計(jì)階段將會(huì)告一段落。

圖4-1系統(tǒng)運(yùn)行圖
系統(tǒng)實(shí)現(xiàn)原理
聊天系統(tǒng)的設(shè)計(jì)跟普通網(wǎng)站設(shè)計(jì)有著許多不同的地方,普通網(wǎng)站設(shè)計(jì)所考慮的因素,例如,普通網(wǎng)站需要對(duì)布局進(jìn)入大量美化以及動(dòng)畫(huà)設(shè)計(jì)等等,而聊天室只要提供滿足訪客雙方直接實(shí)時(shí)聊天即可。因此,在設(shè)計(jì)聊天系統(tǒng)的過(guò)程中,必須要考慮好以下幾個(gè)設(shè)計(jì)要點(diǎn):
在Internet上的聊天程序一般都是以服務(wù)器提供服務(wù)端連接響應(yīng),使用者通過(guò)客戶端程序登錄到服務(wù)器,就可以與登錄在同一服務(wù)器上的用戶交談,這是一個(gè)面向連接的通信過(guò)程。因此,程序要在TCP/IP環(huán)境下,實(shí)現(xiàn)服務(wù)器端和客戶端兩部分程序。如圖4-2所示:
服務(wù)器端啟動(dòng)后先要調(diào)用Serversocket()函數(shù)建立一個(gè)流式套接字,并返回引用新套接字的描述符。然后將此套接字描述符與本機(jī)的一個(gè)端口建立關(guān)聯(lián),這由ServerSocket()函數(shù)來(lái)完成。服務(wù)器只有在調(diào)用了accept()函數(shù)進(jìn)入等待狀態(tài)之后才可以接受來(lái)自客戶端的請(qǐng)求。一旦接收到客戶端通過(guò)connect()發(fā)出的連接請(qǐng)求,accept()將返回一個(gè)新的套接字描述符,通過(guò)套接字描述符調(diào)用相應(yīng)的流的read()或write()函數(shù)即可與客戶端進(jìn)行數(shù)據(jù)收發(fā)。待數(shù)據(jù)傳送完成,服務(wù)器和客戶端調(diào)用closes()關(guān)閉套接字。需要說(shuō)明的是服務(wù)器此時(shí)關(guān)閉的是此前由accept()所返回的新套接字,而不是先前開(kāi)始創(chuàng)建的套接字。在此套接字被關(guān)閉后,服務(wù)器將再次處于阻塞狀態(tài),以等待下一個(gè)客戶端的連接請(qǐng)求并重復(fù)上述過(guò)程。

圖4-2系統(tǒng)實(shí)現(xiàn)原理
服務(wù)器端
服務(wù)器的流程圖如下4-3所示:

圖4-3服務(wù)器流程圖
服務(wù)器接收到客戶的信息,進(jìn)行相應(yīng)的判定,將信息交給相應(yīng)的功能模塊進(jìn)行處理。根據(jù)功能需要我將判定分為以下幾類如表4-1所示:
表4-1 自定義數(shù)值
名稱發(fā)送值備注CHAT1聊天REFRESH2更新好友REGISTER3注冊(cè)LOGIN4登錄ADD5添加好友DELETE6刪除好友NOHAVE7該用戶不存在和不在線AGREE8同意添加好友REFUSE9拒絕添加好友
用戶登錄驗(yàn)證模塊
為了保證用戶信息的安全,將用戶是否合法的判定放在服務(wù)器端,通過(guò)查詢數(shù)據(jù)庫(kù)得出判定結(jié)果,返回給客戶端。信息的轉(zhuǎn)發(fā)模塊
采用服務(wù)器轉(zhuǎn)發(fā)的方式,實(shí)現(xiàn)外網(wǎng)聊天的功能。服務(wù)器將接收到的信息轉(zhuǎn)發(fā)給其他用戶。其中信息類型包括CHAT、ADD、AGREE、REFUSE這四種類型。
(1)CHAT 服務(wù)器判定為CHAT,則轉(zhuǎn)發(fā)給與之通信的用戶。
(2)ADD、AGREE、REFUSE三者均為同一功能——添加好友。當(dāng)用戶點(diǎn)擊添加好友時(shí),服務(wù)器接收到類型為ADD的消息,并將他轉(zhuǎn)發(fā)給要添加的好友。好有用戶可以選擇同意添加好友和拒絕添加好友,分別向服務(wù)器發(fā)送一個(gè)類型為AGREE和REFUSE的信息。
服務(wù)器則根據(jù)類型不同完成數(shù)據(jù)庫(kù)的添加。刷新好友列表模塊
用戶點(diǎn)擊刷新列表后,向服務(wù)器發(fā)送REFRESH類型的消息,服務(wù)器將查詢數(shù)據(jù)庫(kù)將該用的好友列表封裝,發(fā)送給該用戶。
客戶端
用戶登錄模塊
當(dāng)用戶登錄時(shí),客戶端由LoginActivity.java界面收集并驗(yàn)證用戶登錄信息后,封裝成User對(duì)象類然后通過(guò)建立在Socket的連接之上的對(duì)象輸出流將用戶登錄信息發(fā)送給服務(wù)器,服務(wù)器端將請(qǐng)求轉(zhuǎn)發(fā)給UserDaoImpl處理,UserDaoImpl在收到信息后將驗(yàn)證數(shù)據(jù)的完整性并在對(duì)象型數(shù)據(jù)庫(kù)中查找該用戶名是否已經(jīng)注冊(cè),然后將注冊(cè)用戶的信息與登錄請(qǐng)求信息進(jìn)行密碼驗(yàn)證,在登錄成功后將該用戶添加到在線用戶列表,最后將登錄結(jié)果返回給客戶端。如果登錄成功,客戶端將繼續(xù)啟動(dòng)聊天主界面。具體流程如下圖4-4所示:

圖4-4 用戶登錄流程圖
用戶交互模塊
用戶交互模塊的功能示意圖如圖4-5:當(dāng)用戶登錄成功后,客戶端有MainActivity.java和ChatWindowsActivity.java界面收集用戶要交互的信息后,封裝成Messageinfo對(duì)象類然后通過(guò)建立在Socket的連接之上的對(duì)象輸出流將用戶交互信息發(fā)送給服務(wù)器,服務(wù)器端將請(qǐng)求類型分類轉(zhuǎn)發(fā)給不同的方法處理。

圖4-5用戶交互圖
用戶注冊(cè)模塊
當(dāng)用戶注冊(cè)時(shí),客戶端由RegisterActivity.java 界面收集用戶注冊(cè)信息后,封裝成User對(duì)象類然后通過(guò)建立在Socket的連接之上的對(duì)象輸出流將用戶注冊(cè)信息發(fā)送給服務(wù)器,服務(wù)器端將請(qǐng)求轉(zhuǎn)發(fā)給UserDaoImpl處理,UserDaoImpl在收到信息后將數(shù)據(jù)完整保存在對(duì)象型數(shù)據(jù)庫(kù)中,如果注冊(cè)成功,客戶端可以返回到LoginActivity.java界面登錄。流程如下圖4-6所示:

圖4-6用戶注冊(cè)流程圖
用戶設(shè)置模塊
當(dāng)用戶登錄成功后,客戶端有MainActivity.java界面收集用戶要交互的信息后,封裝成Messageinfo對(duì)象類然后通過(guò)建立在Socket的連接之上的對(duì)象輸出流將信息發(fā)送給服務(wù)器,服務(wù)器端將請(qǐng)求類型分類轉(zhuǎn)發(fā)給不同的方法處理。用戶設(shè)置的功能模塊圖如下圖4-7所示:

圖4-7用戶設(shè)置模塊功能示意圖
用戶注銷模塊
當(dāng)用戶點(diǎn)擊退出按鈕,客戶端有MainActivity.java界面收集用戶要交互的信息后,封裝成Messageinfo對(duì)象類然后通過(guò)建立在Socket的連接之上的對(duì)象輸出流將用戶退出信息發(fā)送給服務(wù)器,服務(wù)器端將請(qǐng)求類型分類轉(zhuǎn)發(fā)給不同的方法處理。用戶注銷的流程圖如下圖4-8所示:

圖4-8用戶退出流程
Android聊天軟件用戶存儲(chǔ)數(shù)據(jù)庫(kù)的設(shè)計(jì)
SQLite 簡(jiǎn)介
SQLite是一款輕型的數(shù)據(jù)庫(kù),是遵守ACID的關(guān)聯(lián)式數(shù)據(jù)庫(kù)管理系統(tǒng),它的設(shè)計(jì)目標(biāo)是嵌入式的,而且目前已經(jīng)在很多嵌入式產(chǎn)品中使用了它,它占用資源非常的低,在嵌入式設(shè)備中,可能只需要幾百K的內(nèi)存就夠了。它能夠支持Windows/Linux/Unix等等主流的操作系統(tǒng),同時(shí)能夠跟很多程序語(yǔ)言相結(jié)合,比如 Tcl、C#、PHP、Java等,
還有ODBC接口,同樣比起Mysql、PostgreSQL這兩款開(kāi)源世界著名的數(shù)據(jù)庫(kù)管理系統(tǒng)來(lái)講,它的處理速度比他們都快。SQLite第一個(gè)Alpha版本誕生于2000年5月. 至今已經(jīng)有10個(gè)年頭,SQLite也迎來(lái)了一個(gè)版本 SQLite 3已經(jīng)發(fā)布。SQLite雖然很小巧,但是支持的SQL語(yǔ)句不會(huì)遜色于其他開(kāi)源數(shù)據(jù)庫(kù),同時(shí)它還支持事務(wù)處理功能等等。SQLite 支持跨平臺(tái),操作簡(jiǎn)單,能夠使用很多語(yǔ)言直接創(chuàng)建數(shù)據(jù)庫(kù)。數(shù)據(jù)庫(kù)設(shè)計(jì)
數(shù)據(jù)庫(kù)分為客戶端數(shù)據(jù)庫(kù)(SQLite)和服務(wù)器端數(shù)據(jù)庫(kù)(Mysql),下面將通過(guò)系統(tǒng)各個(gè)實(shí)體的E-R圖予以詳細(xì)說(shuō)明。
客戶端數(shù)據(jù)庫(kù):
為了實(shí)現(xiàn)用戶的快速登錄,記住用戶的個(gè)性化選擇即當(dāng)用戶選中下拉列表中的賬號(hào)恢復(fù)該賬號(hào)用戶設(shè)置的選項(xiàng)。建立用戶表將用戶的User_ID,Password,HeadImage等屬性存入SQLite中,設(shè)計(jì)如下圖4-9所示的數(shù)據(jù)項(xiàng)和數(shù)據(jù)結(jié)構(gòu)。

圖4-9 客戶端用戶表E-R圖
服務(wù)器端的數(shù)據(jù)庫(kù)
服務(wù)器端主要記錄注冊(cè)用戶的個(gè)人信息,在線情況和好友,如圖4-10所示:

圖4-10 服務(wù)器端用戶表E-R圖
好友關(guān)系表,如圖4-11所示:

圖4-9 好友關(guān)系表E-R圖
三個(gè)相應(yīng)的表結(jié)構(gòu)如下表4-2、4-3、4-4所示:
表4-2客戶端用戶表
字段名字段類型字段說(shuō)明備注UserNameVarchar(10)用戶名主鍵PasswordVarchar(10)用戶密碼不能為空MoodVarchar(50)心情或個(gè)性簽名可以為空Box_rembInteger是否記住用戶密碼默認(rèn)為0Box_openInteger用戶是否接受添加好友默認(rèn)為0Self_ImageBlob用戶頭像默認(rèn)為自帶頭像
表4-3服務(wù)器端用戶表
字段名字段類型字段說(shuō)明備注UserNameVarchar(10)用戶名主鍵PasswordVarchar(10)用戶密碼不能為空MoodVarchar(50)心情或個(gè)性簽名可以為空stateInteger用在線狀態(tài)默認(rèn)為0Self_ImageBlob用戶頭像null
表4-4好友關(guān)系表
字段名字段類型字段說(shuō)明備注UserNameVarchar(10)用戶名主鍵,外鍵FriendNameVarchar(10)好友名主鍵,外鍵
本章小結(jié)
本章通過(guò)對(duì)系統(tǒng)實(shí)現(xiàn)原理、客戶端和服務(wù)器端以及數(shù)據(jù)庫(kù)的設(shè)計(jì),基本完成了程序的整體架構(gòu),為編碼和實(shí)現(xiàn)鋪平了道路。
Android聊天軟件的實(shí)現(xiàn)
基于Android的即時(shí)通信軟件是為給Android手機(jī)用戶提供隨時(shí)隨地與好友交流的平臺(tái),主要針對(duì)Android手機(jī)用戶。根據(jù)需求分析、系統(tǒng)概要設(shè)計(jì)以及更好地用戶體驗(yàn)編碼與實(shí)現(xiàn)分為數(shù)據(jù)傳輸?shù)膶?shí)現(xiàn)、客戶端業(yè)務(wù)邏輯實(shí)現(xiàn)、服務(wù)器業(yè)務(wù)邏輯實(shí)現(xiàn)和界面UI實(shí)現(xiàn)四個(gè)部分。數(shù)據(jù)傳輸?shù)膶?shí)現(xiàn)
本程序采用C/S模式架構(gòu),客戶端與服務(wù)器端使用socket套接字實(shí)現(xiàn)連接,通過(guò)多線程技術(shù)完成相互通信。
Socket傳輸模塊的實(shí)現(xiàn)
Android集成了Java的運(yùn)行環(huán)境所以對(duì)Java有很好的支持,本系統(tǒng)就使用java.net.Socket包。在服務(wù)器和客戶端定義相同的Bean結(jié)構(gòu),通過(guò)序列化將對(duì)象轉(zhuǎn)換成二進(jìn)制流傳送到服務(wù)器端,使用在服務(wù)器端定義的Bean進(jìn)行反序列化,將二進(jìn)制流恢復(fù)為對(duì)象代碼如下:
public boolean connect(User user) {
boolean isok = false;
try {
s = new Socket("10.0.2.2", 9999);
s.getOutputStream();
oos = new ObjectOutputStream(s.getOutputStream());
oos.writeObject(user);
ois = new ObjectInputStream(s.getInputStream());
type=(MessageType) ois.readObject();
gf=(Group_Friend) ois.readObject();
myapp.setChilds(gf.getFriends());
myapp.setGroups(gf.getGroups());
isok=type.isOk();
if(isok){
Client_To_ServerThread ccst=new Client_To_ServerThread(s);
//啟動(dòng)該通訊線程
new Thread(ccst).start();
SaveClientSocket.add(user.getUsername(), ccst);
}
} catch (UnknownHostException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return isok;
}服務(wù)器端的實(shí)現(xiàn)
用戶登錄的實(shí)現(xiàn)
查詢數(shù)據(jù)庫(kù)判定用戶是否存在,如果存在則創(chuàng)建一個(gè)新的進(jìn)程,并將這個(gè)進(jìn)程添加到進(jìn)程管理類中(SaveClientThread)。相關(guān)代碼如下:
if(sql.checkUser(user)!=null){
if(sql.checkUser(user).getPassword().equals(password)){//查找數(shù)據(jù)庫(kù)成功后
try {
Group_Friend gf=new Group_Friend();
UserDaoImpl udi=new UserDaoImpl();
MessageType type = new MessageType();
type.setConnect(true);
type.setExist(false);
type.setOk(true);
gf.setFriends(udi.getFriendList(null, null));
gf.setGroups(udi.getGroups(null));
oos.writeObject(type);
oos.writeObject(gf);
oos.flush();
//保存該socket 并創(chuàng)建一個(gè)線程
Server_To_ClientThread stc=new Server_To_ClientThread(s);
SaveTheSocket sts=new SaveTheSocket();
execu.execute(stc);
sts.add(user.getUsername(), stc);
System.out.println("添加"+user.getUsername());
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}用戶退出
接收到用戶退出的消息,將管理該用的線程關(guān)閉,同時(shí)將該線程從線程管理中移除。相關(guān)代碼如下:
public static HashMap<String,Server_To_ClientThread> hm=new HashMap<String, Server_To_ClientThread>();
public static void add(String id,Server_To_ClientThread stc){
hm.put(id, stc);
}
public static Server_To_ClientThread getThread(String id){
return hm.get(id);
}
public static void delete(String id){
hm.remove(hm.get(id));
}
}更新好友列表
接收到用戶查詢好友的消息,從數(shù)據(jù)庫(kù)中查詢?cè)撚脩艉糜研畔?,發(fā)送給該用戶。相關(guān)代碼如下:
while(true){
try {
ObjectInputStream ois=new ObjectInputStream(s.getInputStream());
Messageinfo message=(Messageinfo)ois.readObject();
System.out.println("~~~~~~~~~~~~~~~~~~~~~~~"+message.getCon());
if(message.getMesType()=="refresh"){
gf.setFriends(udi.getFriendList(null, null));
gf.setGroups(udi.getGroups(null));
oos.writeObject(type);
oos.writeObject(gf);
oos.flush();
}
Server_To_ClientThread stc=SaveTheSocket.getThread(message.getGetter());
System.out.println(message.getGetter());
ObjectOutputStream oos=new ObjectOutputStream(stc.s.getOutputStream());
oos.writeObject(message);
} catch (Exception e) {
e.printStackTrace();
}
}
客戶端代碼的實(shí)現(xiàn)
由于Android特定的設(shè)計(jì)Activity與Service、線程之間無(wú)法直接交互需要通過(guò)Handler、ServiceConnect等實(shí)現(xiàn)互通更新UI。
Activity與Service間信息的交互
從Linux的概念空間中,Android的設(shè)計(jì)每個(gè)Activity都是一個(gè)獨(dú)立的進(jìn)程,每個(gè)Service也都是一個(gè)獨(dú)立的進(jìn)程,Activity,Service之間要交換數(shù)據(jù)屬于IPC(進(jìn)程間通信)。通過(guò)Binder實(shí)現(xiàn)Activity與Service的通信,Binder是Android系統(tǒng)提供的一種IPC。
在Activity中實(shí)現(xiàn)ConnectService對(duì)象,在Service中實(shí)現(xiàn)一個(gè)類繼承Binder,通過(guò)BinderService函數(shù)綁定Service,在綁定Service的同時(shí)將回調(diào)ConnectService中的onServiceConnected方法,實(shí)例化一個(gè)Service對(duì)象從而實(shí)現(xiàn)在Activity中調(diào)用Service中的方法。ConnectService的實(shí)現(xiàn):
private ServiceConnection conn = new ServiceConnection() {
@Override
public void onServiceConnected(ComponentName name, IBinder service) {
// TODO Auto-generated method stub
mService = (ConnectSerivce.LocalBinder) service).getService();
}
@Override
public void onServiceDisconnected(ComponentName name) {
// TODO Auto-generated method stub
mService = null;
}
};
Binder的實(shí)現(xiàn):
public class LocalBinder extends Binder {
public ConnectService getService() {
return ConnectService.this;
}
}
public IBinder onBind(Intent intent) {
// TODO Auto-generated method stub
return binder;
}
Activity調(diào)用Service中的方法:
public booleam mLogin( final User user){
return mService.serviceLogin(user);
}
上面實(shí)現(xiàn)了Activity向Service發(fā)送數(shù)據(jù),而Service和線程向Activity發(fā)送數(shù)據(jù)則要通過(guò)Handler來(lái)時(shí)實(shí)現(xiàn)相關(guān)代碼如下:
調(diào)用Handler
private void judgeToSend(Message msg){
ActivityManager am = (ActivityManager) mContext.getSystemService(Context.ACTIVITY_SERVICE);
ComponentName cn = am.getRunningTasks(1).get(0).topActivity;
String name=cn.getClassName();
System.out.println("activity名字"+name);
if(name.equals("ben.client.MainActivity")){
MainActivity.handler.sendMessage(msg);
}else{
ChatWindowsActivity.myHandler.sendMessage(msg);
}
}
Handler的實(shí)現(xiàn)
public class MyHandler extends Handler{
private MainActivity main;
public MyHandler (MainActivity main){
this.main=main;
}
@Override
public void handleMessage(Message msg) {
// TODO Auto-generated method stub
super.handleMessage(msg);
具體方法略
}
}
}客戶端UI實(shí)現(xiàn)
受歡迎的軟件除了具有強(qiáng)大的功能外,有好的界面和簡(jiǎn)潔的操作也是不可缺少的環(huán)節(jié)。Android系統(tǒng)到目前為止已經(jīng)更新了多個(gè)版本,但是其控件的設(shè)置,界面的美化依然有很多不足。為了給提高用戶的客戶體驗(yàn),本程序參考騰訊QQ的UI設(shè)計(jì)理念同時(shí)加入自己的一些想法。半透明懸浮窗口的實(shí)現(xiàn)
采用popupwindows作為窗口的載體,通過(guò)setAnimationStyle方法加載動(dòng)畫(huà)的效果,實(shí)現(xiàn)窗口的側(cè)滑出現(xiàn)和消失。Popupwindows的初始化代碼如下:
private void initPop(){
LinearLayout popup = (LinearLayout) getLayoutInflater().inflate(R.layout.popup_help,null);
RelativeLayout morph=(RelativeLayout) getLayoutInflater().inflate(R.layout.register, null);
pop = new PopupWindow(popup,320,480);
pop.setAnimationStyle(R.style.mypopwindow_in);
pop.showAtLocation(morph, Gravity.CENTER, 0, 0);
pop.setFocusable(true);
pop.update();
ImageView image=(ImageView) popup.findViewById(R.id.register_content);
image.setBackgroundResource(R.drawable.morph_help);
image.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
pop.dismiss();
}
});
}主界面左右滑動(dòng)切換的實(shí)現(xiàn)
通過(guò)自己定義的ScrollLayout控件,實(shí)現(xiàn)左右滑動(dòng)切換。ScrollLayout繼承了ViewGroup,從寫了其中的onLayout和onMeasure方法。并且通過(guò)繼承自定義的接口完成了數(shù)據(jù)的共享和傳遞。
/**
* 方法名稱:snapToScreen 方法描述:滑動(dòng)到到第whichScreen(從0開(kāi)始)個(gè)界面,有過(guò)渡效果
* @param whichScreen
*/
public void snapToScreen(int whichScreen) {
// get the valid layout page
int lastIndex = mCurScreen;
whichScreen = Math.max(0, Math.min(whichScreen, getChildCount() - 1));
System.out.println("whichSc"+whichScreen+"curscreen"+mCurScreen);
if (getScrollX() != (whichScreen * getWidth())) {
final int delta = whichScreen * getWidth() - getScrollX();
mScroller.startScroll(getScrollX(), 0, delta, 0,
Math.abs(delta) * 2);
mCurScreen = whichScreen;
invalidate(); // Redraw the layout
}
for (LayoutChangeListener listener : listeners)
listener.doChange(lastIndex, whichScreen);
}
**/
postInvalidate();
}
}
本章小結(jié)
通過(guò)本章實(shí)現(xiàn)了客戶端和服務(wù)器端的大致功能,包括用戶的注冊(cè)、登錄、設(shè)置頭像添加刪除好友、與好友進(jìn)行聊天等。在沒(méi)有進(jìn)過(guò)測(cè)試的情況下,程序還有許多未能發(fā)現(xiàn)的問(wèn)題,這些問(wèn)題將通過(guò)系統(tǒng)測(cè)試發(fā)現(xiàn),更正。
系統(tǒng)演示與運(yùn)行
為了確認(rèn)基于Android的聊天軟件能夠準(zhǔn)確而又完整地體現(xiàn)該軟件最初設(shè)計(jì),同時(shí)完成各項(xiàng)具體功能需求,因此對(duì)系統(tǒng)的部分主要功能進(jìn)行了實(shí)際運(yùn)行測(cè)試。用戶登錄演示
用戶登錄系統(tǒng)后進(jìn)入登錄界面,用戶登錄界面如下圖6-1:
圖6-1登錄界面I
用戶登錄需填寫賬號(hào)和密碼,驗(yàn)證成功后跳轉(zhuǎn)到好友列表界面。同時(shí)用戶可以點(diǎn)擊下拉菜單,選擇以往登錄記錄快速登錄。效果如下圖6-2所示

圖6-2登錄界面II
用戶在有選擇以往登錄記錄的權(quán)利,同時(shí)也有刪除登錄記錄的方式。用戶在選擇完成后效果如下圖6-3
圖6-3登錄界面III
用戶注冊(cè)演示
用戶注冊(cè)界面如下圖6-4:
圖6-4注冊(cè)界面
注冊(cè)界面需用戶填入必填項(xiàng)賬號(hào)、密碼、確認(rèn)密碼。同時(shí)用戶還可以設(shè)置自己的頭像(為可選填項(xiàng))。點(diǎn)擊圖片設(shè)置頭像,為了好的用戶體驗(yàn),設(shè)置了三種頭像設(shè)置方式,分別為New Picture(手機(jī)拍照)、Photo Albums(本地相冊(cè))、System Photo(軟件自帶的圖片)。測(cè)試效果如下圖6-5和圖6-6:
圖6-5更換頭像界面
圖6-6系統(tǒng)自帶圖像
為了提醒用戶怎么設(shè)置頭像提供了幫助提示測(cè)試效果如下圖6-7:
圖6-7幫助界面
當(dāng)用戶填寫完信息,設(shè)置頭像頭點(diǎn)擊確定,完成注冊(cè)。注冊(cè)成功的界面如下圖6-8
圖6-8注冊(cè)成功界面
主界面演示
當(dāng)用戶登錄成功后跳轉(zhuǎn)到主界面如下圖6-9所示:
圖6-9主界面
主界面包含好友列表界面和最近聯(lián)系人界面,通過(guò)在屏幕上左右撥動(dòng)或者點(diǎn)擊圖片實(shí)現(xiàn)兩個(gè)界面的切換。最近聯(lián)系人界面如下圖6-10:
圖6-10最近聯(lián)系人界面
聊天界面的演示
用戶選擇好友后進(jìn)入聊天界面如圖6-11所示:
圖6-11聊天界面
本章小結(jié)
本章主要演示了軟件的主要功能,通過(guò)運(yùn)行效果,基本實(shí)現(xiàn)了Android聊天軟件的功能。但是在文字傳送的同時(shí)沒(méi)能實(shí)現(xiàn)表情發(fā)送的功能。由于個(gè)人水平有限,時(shí)間也比較緊,只能實(shí)現(xiàn)系統(tǒng)的基本操作,對(duì)其它功能我會(huì)在以后的工作中進(jìn)一步的學(xué)習(xí)并完善。
結(jié)束語(yǔ)
本文研究基于Android手機(jī)平臺(tái)的聊天軟件的設(shè)計(jì)與實(shí)現(xiàn)。從用戶的角度,探討了如何構(gòu)建一個(gè)便捷的即時(shí)通信軟件?;緷M足了結(jié)構(gòu)化、界面友好、速度快以及穩(wěn)定性等特點(diǎn)。
系統(tǒng)著重研究并實(shí)現(xiàn)了網(wǎng)絡(luò)應(yīng)用的部分。根據(jù)實(shí)現(xiàn)的情況看,具有較友好的聊天界面生成效果和良好的用戶體驗(yàn),以及流暢的網(wǎng)絡(luò)通信效果。好友通信可以達(dá)到基本的聊天要求。
本課題在大量閱讀和參考有關(guān)理論和應(yīng)用資料的基礎(chǔ)上,歸納、總結(jié)并研究了手機(jī)聊天客戶端應(yīng)用,對(duì)手機(jī)聊天的設(shè)計(jì)及開(kāi)發(fā)進(jìn)行了分析,主要做了以下幾方面的工作:了解了PC端聊天軟件相應(yīng)功能與操作。
掌握多線程方法使用
熟練掌握Android相關(guān)技術(shù)
由于個(gè)人的能力和精力有限,此系統(tǒng)在設(shè)計(jì)和實(shí)現(xiàn)中存在一些還有待進(jìn)一步解決的問(wèn)題,具體表現(xiàn)如下:
服務(wù)器端的數(shù)據(jù)庫(kù)性能較差。
在軟件安全上,對(duì)用戶的賬號(hào)與密碼沒(méi)有進(jìn)行保證,沒(méi)有對(duì)不同用戶進(jìn)行限制,使其用戶使用手機(jī)都能上之前登陸過(guò)的賬號(hào)。
內(nèi)部溝通方面,沒(méi)有添加表情等。
通過(guò)畢業(yè)設(shè)計(jì),發(fā)現(xiàn)自己在理論研究和實(shí)際工作能力等方面都得到了提高,受益匪淺,同時(shí)在老師的指導(dǎo)和課題組同學(xué)的共同幫助下,及時(shí)總結(jié)研究成果,這些無(wú)疑會(huì)對(duì)我今后的工作和學(xué)習(xí)帶來(lái)很大的幫助。
參考文獻(xiàn)
楊豐盛.Android應(yīng)用開(kāi)發(fā)揭秘[M].北京:機(jī)械工業(yè)出版社 2010.1
百度百科.[EB/OL]?http://baike.baidu.com/view/1241829.htm
百度圖片.[EB/OL]?http://image.baidu.com/
Bruce Eckel.陳昊鵬(譯)Thinking in Java[M].北京:機(jī)械工業(yè)出版社,2007.6
王水、張曉民.軟件工程素質(zhì)導(dǎo)論[M].河南:河南科技技術(shù)出版社,2011.2
朱麗平.UML面向?qū)ο笤O(shè)計(jì)與分析[M].北京:清華大學(xué)出版社,2007.
馬曉玉等.Oracle 10g數(shù)據(jù)庫(kù)管理應(yīng)用和開(kāi)發(fā)[M].北京: 清華大學(xué)出版社 2007.11
馬志強(qiáng).基于Android平臺(tái)即時(shí)通信系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)[D].北京: 北京交通大學(xué),2009.
謝希仁.計(jì)算機(jī)網(wǎng)絡(luò)(第五版)[M].北京:電子工業(yè)出版社,2009.
王小東.高性能MySQL[M].北京:電子工業(yè)出版社,2010.
減海峰,張力軍.通訊軟件發(fā)展現(xiàn)狀的分析與研究[J].計(jì)算機(jī)與數(shù)字工程 2008年第二期 112-124
通過(guò)服務(wù)更新進(jìn)度通知和在Activity中監(jiān)聽(tīng)服務(wù)進(jìn)度.[EB/OL]?http://blog.csdn.net/liuhe688/article/details/6623924
Android的消息機(jī)制.[EB/OL]?http://blog.csdn.net/happy_6678/article/details/5940756
自定義布局-ScrollLayout.[EB/OL]?http://www.cnblogs.com/wader2011/archive/2011/10/10/2205142.html
Android學(xué)習(xí)之Bitmap Drawable byte[]轉(zhuǎn)化.[EB/OL]?http://www.cnblogs.com/enricozhang/archive/2011/09/29/2195601.html
致謝
本應(yīng)用及學(xué)位論文是在XXX老師的親切關(guān)懷和悉心指導(dǎo)下完成的。他嚴(yán)肅的科學(xué)態(tài)度,嚴(yán)謹(jǐn)?shù)闹螌W(xué)精神,深深地感染和激勵(lì)著我。從課題的選擇到項(xiàng)目的最終完成,XX老師都始終給予我細(xì)心的指導(dǎo)和不懈的支持,使我不僅增強(qiáng)了自學(xué)的能力和開(kāi)發(fā)軟件的能力,而且對(duì)一些軟件開(kāi)發(fā)模式有了更加深刻的認(rèn)識(shí)。
在此,我還要感謝在一起愉快的度過(guò)本科生活的各位同學(xué),正是由于你們的幫助和支持,我才能克服一個(gè)一個(gè)的困難和疑惑,直至本文的順利完成。
回顧四年的學(xué)習(xí)生活,我要向所有關(guān)心和培養(yǎng)我們的各級(jí)領(lǐng)導(dǎo)、授予我知識(shí)的各位尊敬的任課老師們、關(guān)心我們生活的輔導(dǎo)員以及陪伴我大學(xué)生涯的同學(xué)和朋友們表示真摯的謝意!
最后,我還要感謝我的父母,是他們這些年的辛苦工作和苦心教導(dǎo),使我有了進(jìn)大學(xué)學(xué)習(xí)的機(jī)會(huì),才有了今天的學(xué)習(xí)成果。