李寧寧,王遠(yuǎn)飛,張 冉
(1.大連東軟信息學(xué)院 遼寧 大連 116023;2.大連理工大學(xué) 遼寧 大連 116023)
隨著網(wǎng)絡(luò)與通信技術(shù)的不斷發(fā)展,當(dāng)代大學(xué)生的校園生活也在發(fā)生著時(shí)代性的變化。當(dāng)前流行的軟件、游戲和電子產(chǎn)品等,都能在校園里得到及時(shí)的關(guān)注和反饋;同時(shí),大學(xué)生也能及時(shí)發(fā)現(xiàn)身邊所需的應(yīng)用,從而著手進(jìn)行開(kāi)發(fā)和推廣。而智能手機(jī)和網(wǎng)絡(luò)的迅速發(fā)展和普及,使得校園應(yīng)用的移動(dòng)化勢(shì)必成為未來(lái)的趨勢(shì)。
Android作為Google移動(dòng)互聯(lián)網(wǎng)戰(zhàn)略的重要組成部分,將進(jìn)一步推進(jìn)“隨時(shí)隨地為每個(gè)人提供信息”這一企業(yè)目標(biāo)的實(shí)現(xiàn)[1],它是一個(gè)真正意義上的開(kāi)放性移動(dòng)設(shè)備綜合平臺(tái),包括操作系統(tǒng)、用戶界面、中間件和應(yīng)用程序,擁有移動(dòng)電話工作所需的全部軟件,同時(shí)其開(kāi)放性保證該平臺(tái)不存在任何阻礙移動(dòng)產(chǎn)業(yè)創(chuàng)新的專有權(quán)障礙[2]。為了探索校園學(xué)習(xí)與生活的各種移動(dòng)應(yīng)用開(kāi)發(fā)思路與過(guò)程,本文以大連東軟信息學(xué)院的校園應(yīng)用為背景,基于開(kāi)放的Android技術(shù),實(shí)現(xiàn)了手機(jī)端的一系列應(yīng)用軟件,并在校園內(nèi)進(jìn)行推廣,現(xiàn)已擁有一定的使用量和客戶群。在此基礎(chǔ)上,搭建了服務(wù)器端+客戶端的Android應(yīng)用開(kāi)發(fā)架構(gòu)模式,開(kāi)發(fā)結(jié)構(gòu)類似的應(yīng)用軟件,從而縮短開(kāi)發(fā)流程。
本文介紹了使用服務(wù)器端+客戶端結(jié)構(gòu),在Android系統(tǒng)上進(jìn)行校園軟件的開(kāi)發(fā)與設(shè)計(jì)——使用Android平臺(tái)推出的SDK和Eclipse開(kāi)發(fā)環(huán)境[3]實(shí)現(xiàn)了校園飲食軟件、東軟新聞客戶端、校園留言板等校園應(yīng)用,方便學(xué)生在手機(jī)端隨時(shí)隨地獲得校園信息,感受大學(xué)生活的便捷和學(xué)以致用的樂(lè)趣。以上應(yīng)用已在模擬器和真機(jī)上通過(guò)測(cè)試。
當(dāng)前的校園移動(dòng)應(yīng)用通常是針對(duì)于學(xué)生手機(jī)端的信息發(fā)布和交流,而信息數(shù)據(jù)是需要通過(guò)網(wǎng)絡(luò)來(lái)進(jìn)行獲取。也就是說(shuō)開(kāi)發(fā)過(guò)程中,應(yīng)包括信息提供端和手機(jī)接收端,即服務(wù)器端和客戶端兩部分:服務(wù)器端負(fù)責(zé)提供數(shù)據(jù)和維護(hù)數(shù)據(jù),客戶端負(fù)責(zé)信息的發(fā)布和顯示,服務(wù)器端和客戶端的紐帶是網(wǎng)絡(luò)連接。該系統(tǒng)的物理架構(gòu)主要由后臺(tái)數(shù)據(jù)庫(kù)服務(wù)器、Web服務(wù)器、無(wú)線網(wǎng)絡(luò)、Android校園客戶端等部分組成??蛻舳耍ㄖ饕蓪W(xué)生使用),通過(guò)無(wú)線網(wǎng)絡(luò)訪問(wèn)后臺(tái)服務(wù)器,相關(guān)數(shù)據(jù)信息由后臺(tái)數(shù)據(jù)庫(kù)服務(wù)器提供,客戶端的部分?jǐn)?shù)據(jù)存儲(chǔ)使用SQLite數(shù)據(jù)庫(kù),應(yīng)該保持客戶端的數(shù)據(jù)和服務(wù)器數(shù)據(jù)庫(kù)中的數(shù)據(jù)一致。運(yùn)行過(guò)程中要保證Web服務(wù)器始終處于開(kāi)啟狀態(tài)。圖1為校園應(yīng)用的系統(tǒng)物理架構(gòu)。
圖1 系統(tǒng)物理架構(gòu)Fig.1 System physical architecture
我校的校園移動(dòng)應(yīng)用系統(tǒng)Web服務(wù)器端采用MyEclipse+Tomcat+MySQL的組合進(jìn)行開(kāi)發(fā),采用Struts2[4]框架實(shí)現(xiàn)了數(shù)據(jù)維護(hù)??蛻舳私⒘薃ndroid SDK+Java JDK+Eclipse的開(kāi)發(fā)環(huán)境,獲取服務(wù)器端的數(shù)據(jù),將其加載到Android應(yīng)用程序中,發(fā)布到手機(jī)客戶端。用戶只需要到校園電子市場(chǎng)下載客戶端軟件(.apk文件),安裝至手機(jī)即可。Web服務(wù)器和數(shù)據(jù)庫(kù)服務(wù)器由開(kāi)發(fā)者在校園內(nèi)網(wǎng)服務(wù)器中進(jìn)行搭建和發(fā)布,并保持長(zhǎng)期運(yùn)行狀態(tài)。
針對(duì)上文的系統(tǒng)體系結(jié)構(gòu),我們將校園應(yīng)用軟件的開(kāi)發(fā)分成服務(wù)器端設(shè)計(jì)、數(shù)據(jù)存儲(chǔ)、網(wǎng)絡(luò)傳輸和客戶端設(shè)計(jì)4部分。下面我們?cè)敿?xì)介紹每一部分的作用和開(kāi)發(fā)思路。
服務(wù)器設(shè)計(jì)采用Struts2框架,并采用MVC三層結(jié)構(gòu)處理。由于數(shù)據(jù)信息不是很大,系統(tǒng)采用的是MySQL數(shù)據(jù)庫(kù)。頁(yè)面通過(guò)JSP技術(shù),將需要維護(hù)的數(shù)據(jù)信息以表格的形式列出,提供增加、刪除、修改的鏈接即可。通常,除了基本的文字信息外,也包含圖片信息。圖片信息是統(tǒng)一放在服務(wù)器的指定目錄中,數(shù)據(jù)庫(kù)中存儲(chǔ)其對(duì)應(yīng)的地址。
服務(wù)器端另一個(gè)很重要的作用是提供JSON(JavaScript Object Notation)格式的數(shù)據(jù),并返回給客戶端。JSON是一種輕量級(jí)的數(shù)據(jù)交換格式,能夠替代XML的工作。在可讀性、可擴(kuò)展性、編碼以及解碼等方面,JSON和XML語(yǔ)言相當(dāng),甚至是有更強(qiáng)的優(yōu)勢(shì)。在Java平臺(tái)上可用的JSON類庫(kù)較多,本系統(tǒng)選擇的是Google的Gson類庫(kù)。
數(shù)據(jù)存儲(chǔ)涉及到兩部分。服務(wù)器端通過(guò)MySQL數(shù)據(jù)庫(kù)存儲(chǔ)信息,同時(shí),在客戶端用SQLite作為本地緩存,擁有和服務(wù)器端完全相同的表結(jié)構(gòu)。在不能及時(shí)聯(lián)網(wǎng)獲得數(shù)據(jù)時(shí),可以通過(guò)本地?cái)?shù)據(jù)庫(kù)得到最近的數(shù)據(jù)內(nèi)容,從而保證了軟件的順暢使用;在聯(lián)網(wǎng)后,檢查本地?cái)?shù)據(jù)庫(kù)內(nèi)容是否與網(wǎng)絡(luò)數(shù)據(jù)庫(kù)內(nèi)容一致,如果不一致,自動(dòng)更新,從而保證數(shù)據(jù)的及時(shí)性和準(zhǔn)確性。
Android已經(jīng)成功地集成了HttpClient[5],客戶端通過(guò)使用Apache的HttpClient發(fā)送GET/POST請(qǐng)求即可正常訪問(wèn)資源,如果需要發(fā)送請(qǐng)求參數(shù),可以調(diào)用setParams()方法來(lái)添加,最后調(diào)用HttpResponse的getEntity()方法可獲得服務(wù)器的響應(yīng)內(nèi)容。當(dāng)然,在整個(gè)運(yùn)行過(guò)程中,要保證客戶端和服務(wù)器端都處于聯(lián)網(wǎng)狀態(tài)。
客戶端設(shè)計(jì)主要是通過(guò)網(wǎng)絡(luò)獲取服務(wù)器數(shù)據(jù),解析JSON格式數(shù)據(jù),然后以用戶的角度進(jìn)行信息提供。為了吸引更多的使用者,美工是客戶端設(shè)計(jì)的重要因素。通過(guò)動(dòng)態(tài)設(shè)置 ListView 的 顏 色 , 借 用 GridView,Gallery,ImageButton,EditText等控件,配用各種背景元素呈現(xiàn)出具有特色風(fēng)格的界面。
該系列校園應(yīng)用軟件的實(shí)現(xiàn)包括客戶端Android界面程序?qū)崿F(xiàn)和后端服務(wù)器。它們采用服務(wù)器端收集和匯總信息,客戶端進(jìn)行信息的獲取、呈現(xiàn)以及反饋。
服務(wù)器端采用Struts2框架編寫(xiě)了比較通用的代碼,完成JSON格式的數(shù)據(jù)傳輸;針對(duì)不同的校園應(yīng)用,有不同的數(shù)據(jù)庫(kù)設(shè)計(jì),在服務(wù)器端的數(shù)據(jù)庫(kù)操作代碼,完成通用功能的編寫(xiě),如數(shù)據(jù)庫(kù)的創(chuàng)建、關(guān)閉、表創(chuàng)建、版本升級(jí)等,為了簡(jiǎn)化數(shù)據(jù)庫(kù)部分的操作,我們將數(shù)據(jù)庫(kù)表連接參數(shù)、表名、列名等通過(guò)XML寫(xiě)入。另外,我們也完成了Excel文件導(dǎo)入導(dǎo)出、圖片上傳、文件讀寫(xiě)等操作。其中項(xiàng)目源代碼部分截圖如圖2所示。
圖2 服務(wù)器端部分截圖Fig.2 Screenshot of server codes
在客戶端,完成了網(wǎng)絡(luò)數(shù)據(jù)獲取的類,只需要修改服務(wù)器地址即可連接到不同的服務(wù)器上??蛻舳俗儎?dòng)較大,針對(duì)不同的應(yīng)用,利用控件做具體的UI設(shè)計(jì),并將服務(wù)器端提供的數(shù)據(jù)以清晰、方便的形式展現(xiàn)出來(lái)。下面從校園飲食軟件、校園留言板和東軟新聞客戶端3個(gè)應(yīng)用程序的客戶端分別進(jìn)行介紹。
3.2.1 校園飲食軟件
就餐飲食是大學(xué)生日常生活中必不可少的一部分。該軟件將各個(gè)食堂的飯菜做了菜譜匯總,提供出最真實(shí)、最客觀的相關(guān)信息;同時(shí)收集同學(xué)們的反饋信息,及時(shí)與校方溝通。另外,還允許商家進(jìn)行拍照上傳,在后臺(tái),管理人員將針對(duì)這些上傳的圖片進(jìn)行整理,選出更恰當(dāng)?shù)膱D片對(duì)當(dāng)前信息進(jìn)行更新。
1)菜譜列表功能
為了推廣菜譜軟件的使用,用戶不需要注冊(cè)和登錄可直接進(jìn)入店鋪列表,進(jìn)入店鋪后,系統(tǒng)以圖片的形式顯示該店鋪的食譜,用戶根據(jù)自己的口味進(jìn)行選擇。店鋪列表通過(guò)ListView控件進(jìn)行實(shí)現(xiàn)。店鋪信息由客戶端向后臺(tái)服務(wù)器請(qǐng)求,通過(guò)JSON格式封裝數(shù)據(jù),在客戶端收到數(shù)據(jù)后,對(duì)其進(jìn)行解析,然后通過(guò)數(shù)據(jù)適配器,將數(shù)據(jù)添加到ListView中。
2)訂餐
訂餐是飲食軟件中不可或缺的一部分。本應(yīng)用在用戶選擇菜譜的同時(shí),只需一鍵即可直接訂餐(前提是本店鋪提供訂餐和電話號(hào)碼)。訂餐的實(shí)現(xiàn)是借助于Android手機(jī)的電話撥打功能,獲取所在店鋪的電話號(hào)碼,直接調(diào)用手機(jī)自帶打電話應(yīng)用程序。
3)搖一搖功能
搖一搖功能是針對(duì)用戶在就餐無(wú)從選擇時(shí),可以通過(guò)該功能來(lái)輔助完成。在搖一搖界面中用戶可以通過(guò)點(diǎn)擊按鈕或晃動(dòng)手機(jī)的方式讓系統(tǒng)隨機(jī)選菜,該功能的實(shí)現(xiàn)主要由以下三個(gè)方面組成:聲音管理器(SoundManager)、震動(dòng)器(Vibrator)與加速傳感器(SensorManager)。具體實(shí)現(xiàn)過(guò)程如下:
通過(guò)注冊(cè)和監(jiān)聽(tīng)SensorEventListener事件,并重載onSensorChanged方法來(lái)獲取手機(jī)加速度的變化,從而決策是否選菜。當(dāng)加速度超過(guò)了預(yù)先設(shè)定的閥值SPEED_SHRESHOLD則回調(diào)方法onShake(),通知應(yīng)用完成了一次搖晃操作,在主函數(shù)中同時(shí)啟動(dòng)SoundManager的playSound()與Vibrator類的vibrate(500)方法,播放設(shè)置的聲音并震動(dòng)0.5s,最后從數(shù)據(jù)庫(kù)中隨機(jī)選出一道菜推薦給用戶。另外,需要增加震動(dòng)的權(quán)限。
其中,該應(yīng)用的部分截圖效果如圖3~5所示。
3.2.2 校園留言板
該軟件的功能比較簡(jiǎn)單,即實(shí)現(xiàn)校園的手機(jī)BBS交流平臺(tái)。讓學(xué)生時(shí)刻可以交流和通訊,方便了校園生活。
1)留言列表
圖3 店鋪列表界面Fig.3 Interface of store list
圖4 菜譜列表界面Fig.4 Interface of menu list
圖5 本期推薦界面Fig.5 Interface of current recommendation
該功能的界面主要是利用ListView組件進(jìn)行設(shè)計(jì)的,因?yàn)長(zhǎng)istView的數(shù)據(jù)來(lái)源靈活并可以實(shí)現(xiàn)自身的樣式定制。ListView中的列表數(shù)據(jù)是通過(guò)適配器將其映射到組件中。列表 的 適 配 器 類 型 有 ArrayAdapter、SimpleAdapter和SimpleCursorAdapter3種,也可以通過(guò)繼承BaseAdapter類自己定義適配器。本系統(tǒng)則采用的自定義的適配器類方式。編程人員通過(guò)實(shí)現(xiàn)getView方法為其第二個(gè)參數(shù)convertView進(jìn)行賦值,在相應(yīng)的控件中獲取服務(wù)器上的數(shù)據(jù)內(nèi)容,實(shí)現(xiàn)自己定義的顯示效果,如圖6所示。
2)留言板菜單
圖6 校園留言板列表Fig.6 List of campus message board
由于留言板功能比較簡(jiǎn)潔,所需功能比較集中。所以其他功能主要是靠菜單與用戶進(jìn)行交互,如圖7所示。東軟貼吧是打開(kāi)一個(gè)新的Activity頁(yè)面,頁(yè)面中通過(guò)WebView控件加載貼吧的內(nèi)容;刷新是更新貼吧內(nèi)容;話題征集與反饋,是借助于友盟實(shí)現(xiàn)的;開(kāi)機(jī)動(dòng)畫(huà)是跳轉(zhuǎn)到開(kāi)機(jī)頁(yè)面;關(guān)于我們進(jìn)入開(kāi)發(fā)團(tuán)隊(duì)介紹頁(yè)面;下載二維碼是通過(guò)聯(lián)網(wǎng)獲取服務(wù)器上的圖片。
圖7 校園留言板菜單Fig.7 Menus of campus message board
3.2.3 東軟新聞客戶端
該應(yīng)用是將傳統(tǒng)的網(wǎng)頁(yè)新聞移植到移動(dòng)應(yīng)用客戶端,讓學(xué)生可以隨時(shí)隨地獲得校園的最新通知和信息。
1)新聞內(nèi)容列表
首次進(jìn)入客戶端,需要同步網(wǎng)絡(luò)數(shù)據(jù),更新成功后,可以進(jìn)入圖8的界面效果。點(diǎn)擊任意的Item項(xiàng)則可以閱讀具體的新聞內(nèi)容頁(yè)(如圖9所示),也可以進(jìn)行相應(yīng)的跟帖。該新聞內(nèi)容均來(lái)自于服務(wù)器端的新聞發(fā)布,通過(guò)JSON數(shù)據(jù)格式傳輸。由于新聞內(nèi)容可能較多,通過(guò)繼承ListView類,實(shí)現(xiàn)了一個(gè)可以下拉更新的子類。
新聞客戶端的信息發(fā)布,除了文字內(nèi)容還有圖片信息。圖片信息的獲取,是通過(guò)數(shù)據(jù)流的形式從網(wǎng)絡(luò)上獲取,并存儲(chǔ)到本機(jī)的SD卡中的指定文件夾中,然后應(yīng)用程序讀取本地的圖片信息利用ImageView、Gallery等控件進(jìn)行顯示。
2)附加功能
圖8 進(jìn)入首頁(yè)Fig.8 Homepage
圖9 新聞內(nèi)容頁(yè)Fig.9 News content
該應(yīng)用還嵌入了百度貼吧的東軟校園貼吧內(nèi)容(如圖10所示)以及天氣預(yù)報(bào)的功能。貼吧是通過(guò)聯(lián)網(wǎng),利用WebView控件讀取URL地址[7],獲取網(wǎng)絡(luò)上的內(nèi)容;天氣預(yù)報(bào)是通過(guò)程序新建一個(gè)線程,讀取天氣信息,并及時(shí)更新至應(yīng)用中。
圖10 東軟校園貼吧Fig.10 Post bar for Neusoft campus
為了給學(xué)生提供及時(shí)準(zhǔn)確的就餐和新聞信息,公共開(kāi)放的交流平臺(tái),增加校園生活的樂(lè)趣,我們?cè)O(shè)計(jì)和實(shí)現(xiàn)了若干校園應(yīng)用軟件。通過(guò)這些軟件的開(kāi)發(fā),師生共同探討了校園軟件的設(shè)計(jì)和實(shí)現(xiàn)過(guò)程,總結(jié)了校園軟件的設(shè)計(jì)模式和結(jié)構(gòu)。該結(jié)構(gòu)開(kāi)拓了校園移動(dòng)軟件應(yīng)用的設(shè)計(jì)思路,為校園實(shí)現(xiàn)信息現(xiàn)代化邁出了第一步,從而進(jìn)一步豐富了當(dāng)?shù)卮髮W(xué)生的校園生活和學(xué)習(xí)。但由于該類軟件的運(yùn)行和維護(hù),均需要校園服務(wù)器的支持,并且局限于校園內(nèi)網(wǎng),我們正在將服務(wù)端代碼遷移至以百度云環(huán)境(BAE),利用其提供的云服務(wù)、云數(shù)據(jù)庫(kù)等完成后臺(tái)數(shù)據(jù)存儲(chǔ)操作,降低維護(hù)的成本,并保證網(wǎng)絡(luò)的暢通。從而即將推出百度云+Android客戶端的開(kāi)發(fā)結(jié)構(gòu)。
[1]楊豐盛.Android應(yīng)用開(kāi)發(fā)揭秘[M].北京:機(jī)械工業(yè)出版社,2010.
[2]顧聰,陳益強(qiáng),劉軍發(fā),等.基于Android平臺(tái)的室內(nèi)LBS系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)[J].計(jì)算機(jī)工程與設(shè)計(jì),2012,33(1):396-400.GU Cong,CHEN Yi-qiang,LIU Jun-fa,et al.Design of indoor LBS system based on Android platform and its implementation[J].Computer Engineering and Design,2012 33(1):396-400.
[3]李寧寧,鄭純軍.基于Android平臺(tái)網(wǎng)絡(luò)相冊(cè)的設(shè)計(jì)與實(shí)現(xiàn)[J].電視技術(shù),2013,37(15):71-73.LI Ning-ning,ZHENG Chun-jun.Design and implementation of web album based on Android[J].Video Engineering,2013,37(15):71-73.
[4]范立峰,林果園.Java Web程序設(shè)計(jì)教程[M].北京:人民郵電出版社,2010.
[5]李剛.瘋狂Android講義[M].北京:電子工業(yè)出版社,2011.
[6]王向輝,張國(guó)印,沈潔.Android應(yīng)用程序開(kāi)發(fā)[M].北京:清華大學(xué)出版社,2010.
[7]劉一田,孔震,李萌.Web應(yīng)用中故障檢測(cè)機(jī)制的研究與改進(jìn)[J].陜西電力,2012(11):66-69.LIU Yi-tian,KONG Zhen,LI Meng.Research and improvement of failure detection mechanism for Web applications[J].Shaanxi Electric Power,2012(11):66-69.