陳德武等
摘 要: 為了方便快捷地為旅客提供旅游信息,設計并開發(fā)了一個基于安卓操作系統(tǒng)的西北地區(qū)旅游信息查詢系統(tǒng)。該系統(tǒng)基于C/S模式,服務器端使用JSP語言和Struts2+Spring+Hibernate開源框架編寫,實現(xiàn)旅游景點信息的瀏覽、添加、修改和刪除,同時為客戶端提供下載和更新數(shù)據(jù)的接口;客戶端為基于Android平臺的智能手機,可以瀏覽、搜索旅游景點信息,也可以通過無線網(wǎng)絡從服務器端下載和更新旅游景點信息。實際應用表明,該系統(tǒng)穩(wěn)定可靠,操作方便,應用前景很廣。
關鍵詞: Android操作系統(tǒng); 旅游信息查詢; C/S模式; Web Services; JSON
中圖分類號:TP315 文獻標志碼:A 文章編號:1006-8228(2014)01-74-04
0 引言
現(xiàn)在人們生活水平普遍提高,外出旅游成為日常生活的一部分。目前,游客獲取旅游信息的主要方式是咨詢旅行社或者上網(wǎng)查詢,這種方式獲取的旅游信息比較粗略,不直觀,不靈活。隨著3G移動網(wǎng)絡的飛速發(fā)展和安卓智能手機的普及,使游客在安卓智能手機上實現(xiàn)旅游信息方便快捷地查詢成為可能性。本文設計了一種基于安卓系統(tǒng)的西北地區(qū)旅游信息查詢系統(tǒng),并且進行了編碼實現(xiàn),使用該系統(tǒng),只要在無線網(wǎng)絡覆蓋的范圍內(nèi),人們就可以通過安卓手機快捷實時地查詢旅游信息,從而為制定旅游計劃提供決策支持。
1 Android操作系統(tǒng)
Android一詞的本義指“機器人”,同時也是Google于2007年11月5日宣布的基于Linux平臺的開源手機操作系統(tǒng)的名稱[1]。Android操作系統(tǒng)采用了分層的架構,它分為四個層,從高層到低層分別是應用程序?qū)?、應用程序框架層、系統(tǒng)運行庫層和Linux內(nèi)核層。
應用程序?qū)佑梢幌盗蠥ndroid系統(tǒng)內(nèi)置的核心應用程序和用戶開發(fā)的應用程序組成,這些應用程序是開發(fā)人員調(diào)用應用程序框架層的API函數(shù)使用Java語言來開發(fā)的。應用程序框架層包含開發(fā)應用程序所使用的API框架,這些框架包括豐富而又可擴展的視圖、內(nèi)容提供器、資源管理器、通知管理器和活動管理器等,可以開發(fā)出各式各樣的應用。系統(tǒng)運行庫層包含一些C/C++庫,包括音頻視頻庫、2D和3D圖形庫、Web瀏覽器引擎等,這些庫能被Android系統(tǒng)中不同的組件使用,它們通過Android應用程序框架為開發(fā)者提供服務[1]。Linux內(nèi)核層只用來提供基本功能,也就是系統(tǒng)的底層服務,它添加了一個名為Goldfish的虛擬CPU以及Android 運行所需的特定驅(qū)動代碼,包括安全機制、內(nèi)存管理、進程管理、網(wǎng)絡堆棧及一系列的驅(qū)動模塊[2]。
Android平臺的開放性允許任何移動終端廠商加入到Android聯(lián)盟中來,從而不存在以往任何阻礙移動產(chǎn)業(yè)創(chuàng)新的專有權障礙[2]。Android系統(tǒng)是一個對第三方軟件完全開放的平臺,其代碼完全開源免費,并且開發(fā)其應用程序的Java語言也是開源免費的。
2 系統(tǒng)架構設計
該系統(tǒng)采用C/S模式:客戶端為基于Android系統(tǒng)的智能手機,支持無線上網(wǎng),用來從服務器端下載和更新旅游信息;服務器端為1臺PC,所使用的服務器軟件為Apache基金會的Tomcat,可以添加、刪除、修改、查詢旅游信息,并且為手機客戶端提供下載和更新旅游信息的服務。系統(tǒng)整體架構如圖1所示。
為了減少手機上網(wǎng)次數(shù),節(jié)省移動數(shù)據(jù)流量,使用手機客戶端Android系統(tǒng)自帶的SQLite數(shù)據(jù)庫,存儲旅游信息。用戶使用系統(tǒng)時,首先通過無線網(wǎng)絡和Internet向服務器發(fā)出下載請求,服務器從MySQL數(shù)據(jù)庫中查詢到所要下載的旅游信息,發(fā)送到手機客戶端,手機客戶端將這些旅游信息存儲到SQLite數(shù)據(jù)庫中;當用戶瀏覽旅游信息時,手機客戶端就可以從SQLite數(shù)據(jù)庫中讀取旅游信息,顯示在界面上;當服務器端的旅游信息被修改時,用戶也可以同步更新手機客戶端SQLite數(shù)據(jù)庫中所存儲的旅游信息。
3 系統(tǒng)軟件設計
3.1 服務器端軟件設計
服務器端主要實現(xiàn)旅游景點信息的瀏覽、添加、修改、刪除,同時為客戶端提供下載和更新數(shù)據(jù)的接口,服務器端主界面如圖2所示。服務器端軟件使用MyEclipse集成開發(fā)工具,基于JSP語言和目前流行的Struts2+Spring+Hibernate開源框架編寫,采用MVC開發(fā)模式,分為DAO、Service和Action三層,如圖3所示。DAO層類包含一些對數(shù)據(jù)庫進行增刪改查的細粒度的方法,Service層類的方法調(diào)用DAO層的方法實現(xiàn)業(yè)務邏輯的功能,Action層類的方法調(diào)用Service層類的業(yè)務邏輯方法對客戶端的請求進行處理和響應[3]。
存儲旅游景點信息的服務器端數(shù)據(jù)庫表結構如圖4所示,手機客戶端數(shù)據(jù)表結構中沒有更新標記字段,其他字段與服務器端相同。其中,所在城市字段是通過省市聯(lián)動的選擇方式獲取,圖片字段存儲的是十幅旅游景點圖片名稱(相鄰兩幅圖片名稱用#隔開),經(jīng)緯度是通過在GoogleMap上點擊旅游景點所在的位置自動獲取的(緯度和經(jīng)度用#分隔)。當添加或修改旅游景點信息時,圖片名稱和其他字段數(shù)據(jù)保存到MySQL數(shù)據(jù)表里,圖片數(shù)據(jù)使用Struts2框架的多文件上傳方式保存到服務器應用目錄的upload文件夾,供手機客戶端下載。更新標記字段標記旅游景點信息是否被修改,如果被修改,設置為1,否則設置為0。
服務器端為客戶端提供的下載和更新旅游信息的接口為InterestsAction類的一些方法,手機客戶端通過訪問這些方法便可得到所需要的旅游景點信息。
3.2 手機客戶端軟件設計
本系統(tǒng)手機客戶端的主要功能是用戶可以瀏覽、下載、更新和搜索旅游景點信息,如圖5所示。本系統(tǒng)客戶端采用Eclipse集成開發(fā)工具下的Android 2.3模擬器插件進行開發(fā),調(diào)用了Android API的GUI組件類庫。
當用戶進入主界面時,手機客戶端從SQLite數(shù)據(jù)庫中將所有的旅游景點信息查詢出來,用ExpendableListView組件分類顯示,如圖6所示。當用戶瀏覽某個旅游景點信息時,客戶端根據(jù)該旅游景點的名稱從SQLite數(shù)據(jù)庫中查詢到其詳細信息,將一些基本信息顯示到界面上,其他更詳細的信息可通過點擊用GridView組件實現(xiàn)的菜單按鈕來瀏覽,如圖7所示。其中天氣信息查詢使用Web Services技術從中國氣象局的天氣預報Web服務網(wǎng)站http://www.webxml.com.cn/上獲取,如圖8所示。景點地圖瀏覽使用的是GoogleMap API,可以以普通地圖視圖、衛(wèi)星視圖和混合視圖的形式顯示,如圖9所示。顯示景點圖片時,客戶端根據(jù)旅游信息中的圖片名稱字段從SDCard中動態(tài)獲取圖片數(shù)據(jù),以畫廊的形式顯示出來,用戶可以很方便地拖動瀏覽。
用戶下載旅游景點信息的流程如圖10所示。
當服務器端的旅游景點信息被修改時,更新標記字段updated被設置為1。用戶更新手機客戶端的旅游景點信息與服務器同步的流程如圖11所示。
3.3 技術難點
在用戶瀏覽旅游景點的天氣信息時,使用的是Web Services技術。Web Services是基于網(wǎng)絡的、分布式的模塊化組件,它執(zhí)行特定的任務,遵守具體的技術規(guī)范,這些規(guī)范使得Web Services能與其他兼容的組件進行互操作[4]。使用該技術可以進行天氣預報、股票行情、火車飛機時刻表、郵政編碼以及IP地址等查詢。本系統(tǒng)調(diào)用Web Services使用的是ksoap2庫,ksoap2是JAVA環(huán)境下的一個輕量級Web Services客戶端庫,被設計用在Applets和J2ME中。KSOAP2-Android是其在Android平臺下的移植,它提供了一個高效的SOAP庫,借助于ksoap2我們就能夠訪問Web Services服務[5],本系統(tǒng)使用ksoap2庫查詢天氣信息的具體步驟如下(具體代碼略):
⑴ 導入ksoap2-Android的jar包ksoap2-android-assembly-
2.4-jar-with-dependencies.jar及其依賴庫到工程;
⑵ 指定WebService的命名空間和調(diào)用的方法名,然后設置調(diào)用方法的參數(shù)值;
⑶ 生成調(diào)用WebService方法的SOAP請求信息,該消息由SoapSerializationEnvelop對象描述;
⑷ 創(chuàng)建AndroidHttpTransport對象,并發(fā)送請求給服務器;
⑸ 接受服務器相應,并序列化SOAP消息,最后使用getResponse方法獲得WebService方法的返回結果;
⑹ 對返回結果進行解析,得到詳細的天氣信息。
手機客戶端下載和更新每個旅游景點的信息,需要從服務器端下載十幅圖片的數(shù)據(jù),為了提高下載速度,節(jié)約下載時間,本系統(tǒng)采用多線程并行下載的方式。每次下載時,運行五個線程,每個線程下載兩幅圖片。下載線程使用HttpURLConnection連接對象獲得服務器端圖片數(shù)據(jù)的InputStream輸入流,然后從該輸入流中讀取字節(jié)數(shù)據(jù)以RandomAccessFile對象的方式寫到SDCard的文件中。
當下載旅游景點的詳細信息時,從服務器端向客戶端傳輸?shù)氖锹糜尉包c信息表的一些記錄組成的字符串。為了減少這些字符串所占用的字節(jié)數(shù),并且便于生成和解析,這里使用目前最流行的JSON數(shù)據(jù)格式來表示。JSON(JavaScript Object Notation)是一種輕量級的完全獨立于語言的數(shù)據(jù)交換格式,易于人閱讀和編寫,同時也易于機器解析和生成。它有兩種基礎結構:對象結構和數(shù)組結構。對象結構表示為將一些鍵值對用逗號隔開并將它們用“{}”括起來,數(shù)組結構是將一些字段值用“[]”括起來的表示形式,使用對象、數(shù)組這兩種基礎結構就可以組合成復雜的數(shù)據(jù)結構了。本系統(tǒng)傳輸旅游景點詳細信息所使用的JSON數(shù)據(jù)格式表示為:{"旅游景點信息": [{"旅游景點1": [{"名稱": "名稱1", "類別": "類別1", "所在城市": "所在城市1", …, "圖片名稱": "圖片名稱1", "經(jīng)緯度": "經(jīng)緯度1" }], "旅游景點2": [{ "名稱": "名稱2", "類別": "類別2", "所在城市": "所在城市2", …, "圖片名稱": "圖片名稱2", "經(jīng)緯度": "經(jīng)緯度2"}],... }]}。
3.4 測試結果
將本系統(tǒng)客戶端的apk文件安裝到一部某國產(chǎn)安卓手機(雙核1GHz主頻的CPU,512M RAM),服務器端部署到一臺PC的Tomcat服務器軟件上,在無線網(wǎng)絡覆蓋的區(qū)域,用客戶端進行旅游景點信息的瀏覽、下載和更新測試。結果表明,整個系統(tǒng)運行流暢,下載和更新旅游信息的速度也比較快,達到了預期效果。
4 結束語
在目前3G移動網(wǎng)絡飛速發(fā)展的條件下,針對普及的安卓智能手機設計并開發(fā)了一款西北地區(qū)旅游信息查詢系統(tǒng)。測試結果表明,該系統(tǒng)運行流暢,操作簡便,具有很高的可用性和可靠性,并且本系統(tǒng)客戶端基于Android平臺開發(fā),還可以移植到裝有安卓操作系統(tǒng)的平板電腦、智能電視等終端上,這種跨平臺的可移植性拓寬了其應用范圍。
參考文獻:
[1] 冷威龍.android_百度百科[EB/OL].百度百科.
[2] 李 琴,陳立定,任志剛.基于Android智能手機遠程視頻監(jiān)控系統(tǒng)的
設計[J].電視技術,2012.36(7):134
[3] 符鈺.基于Struts2+Hibemate3+Spring3框架的Web應用研究[J].
金華職業(yè)技術學院學報,2013.13(3):61
[4] 張和平.web services_百度百科[EB/OL].百度百科.
[5] 彭海文.Android Web Services應用研究[J].電腦知識與技術,2011.7
(12):2851