陳德武等



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