摘要:開發(fā)一款基于安卓平臺的校園信息服務(wù)客戶端,該客戶端可實現(xiàn)學(xué)生登錄、校園公告、教務(wù)信息查看以及校園地圖功能??蛻舳酥饕ㄟ^HTTP協(xié)議向服務(wù)器發(fā)送消息,并通過Jsoup技術(shù)對服務(wù)器返回的消息進(jìn)行解析;同時調(diào)用三方提供提供的街景地圖服務(wù),具有良好的用戶體驗性。
關(guān)鍵詞: Android; 校園服務(wù)系統(tǒng); Jsoup; HTTP協(xié)議; HTML解析
中圖分類號:TP311 文獻(xiàn)標(biāo)識碼:A 文章編號:1009-3044(2014)21-5673-05
The Design and Implementation of Campus Service System Based on Android Platform
LIU Hong-ying
(Nanjing University of Science and Technology Zijin College, Nanjing 210046, China)
Abstract: Developing an APP based on android develop platform. The APP provides the function of Login、View information as well as campus map. Client sends message to the server though HTTP protocol, Using Jsoup technology, the information returned by the server was analyzed. At the same time, the APP call the three party API to provide Street View mapping service. It have a good user experience.
Key words: Android; campus service system; Jsoup; HTTP protocol; HTML analysis
隨著通信技術(shù)的不斷發(fā)展,人們對信息化服務(wù)的要求越來越高。而數(shù)字化校園的建設(shè)不容忽視,大部分校園服務(wù)系統(tǒng)是基于web網(wǎng)絡(luò)開發(fā)出來的[1],但是基于智能手機端的校園系統(tǒng)建設(shè)仍然不足,本系統(tǒng)開發(fā)了一款基于Android平臺的校園服務(wù)系統(tǒng),面向用戶主要為學(xué)生,學(xué)生可登陸該系統(tǒng)查看個人成績、課表安排等信息,同時校園最新公告也可以進(jìn)行查看,此外還提供了校園地圖功能,可對當(dāng)前位置定位以及查看街景地圖。
1 相關(guān)技術(shù)
1.1 Android平臺簡介
Android系統(tǒng)由Google公司開發(fā),一上市便獲取很大市場。Android系統(tǒng)基于Linux系統(tǒng),采用Java語言進(jìn)行開發(fā),它層次分明,主要包括三部分:中間件、用戶界面以及應(yīng)用軟件,三層之間耦合性低,當(dāng)下面一層發(fā)生改變時,不需要改變上層應(yīng)用,只需改變下層代碼即可[2]。
Android應(yīng)用程序主要包含四大組件:Activity、Service、Content Provider和BroadCastReceiver。在開發(fā)過程中,并不是每一個開發(fā)的APP都包含這四個組件,在本系統(tǒng)中主要用到前三個組件[3]。上述四個組件要進(jìn)行配置時需要借助于AndroidManifest.xml配置文件,該配置文件是每一個APP開發(fā)過程中最重要的文件之一,相關(guān)組件的定義,組件的功能以及應(yīng)用程序需要的權(quán)限都在此全局配置文件中定義。
1.2 HTTP協(xié)議簡介
HTTP協(xié)議是網(wǎng)絡(luò)中的重要協(xié)議之一,該協(xié)議是典型的C/S模式,用于本地客戶端與萬維網(wǎng)服務(wù)器傳輸超文本,此協(xié)議主要包含兩部分:請求和響應(yīng)。客戶端發(fā)送相關(guān)請求,請求方法包含Put、Post、Get等方法,本系統(tǒng)主要用到Post和Get方法,服務(wù)器接收到客戶端的請求之后,響應(yīng)相關(guān)信息。
1.3 Jsoup技術(shù)簡介
Jsoup主要用于文本解析,是Java中用來操作HTML文件的第三方類庫[4]。該技術(shù)可直接通過URL地址或者HTML格式的文本進(jìn)行解析,它提供了功能完善的API接口,開發(fā)者只需要根據(jù)API文檔進(jìn)行調(diào)用即可,可以根據(jù)節(jié)點名稱或者HTML元素中的id來獲取需要的消息,Jsoup中像getElementById等方法跟JavaScript中的功能完全一致,使開發(fā)者調(diào)用更方便。
2 系統(tǒng)分析與設(shè)計
2.1 整體功能
本系統(tǒng)主要包含四部分:學(xué)生登錄,最新公告,教務(wù)信息,校園地圖。功能設(shè)計圖如圖1所示。
學(xué)生登錄:通過對學(xué)校網(wǎng)站服務(wù)器的訪問,可以獲取相關(guān)成績和課表。
最新公告查詢:通過對學(xué)校網(wǎng)站最新公告模塊的解析,查看學(xué)校的最新公告信息。
教務(wù)信息查詢:通過對學(xué)校網(wǎng)站教務(wù)信息模塊的解析,可查看學(xué)校的教學(xué)安排。
校園地圖:通過對百度地圖和街景地圖的二次開發(fā),可查看自己所在的位置。
2.2 系統(tǒng)分析
從實現(xiàn)上來看,該系統(tǒng)主要通過手機客戶端與服務(wù)器交互,手機客戶端向服務(wù)器發(fā)送請求,服務(wù)器響應(yīng)消息,客戶端得到消息之后通過Jsoup解析方法處理信息并將之顯示。如圖2所示。
由上述可知,在本系統(tǒng)中主要有兩大模塊:一是界面顯示模塊,二是數(shù)據(jù)處理模塊,其中數(shù)據(jù)處理模塊包括獲取服務(wù)器數(shù)據(jù)和對數(shù)據(jù)進(jìn)行解析
2.2.1界面顯示:
本系統(tǒng)中主要有四個界面:主界面,學(xué)生信息顯示界面,公告和教務(wù)信息界面,地圖界面。其中公告和教務(wù)信息界面是類似的,在學(xué)生信息顯示界面必須提供一個學(xué)生登錄窗口,登錄窗口以Dialog形式展現(xiàn)。
除了activity.main之外,還需要其他的activity,AndroidManifest文件中部分代碼如下:
2.2.2 登錄實現(xiàn)
不管是學(xué)生登錄界面還是公告信息展示界面,都必須要先獲取所需信息。一般客戶端從服務(wù)器端獲取數(shù)據(jù)分為兩種:一種是調(diào)用服務(wù)器端提供的API,另外一種是獲取服務(wù)器端提供的HTML文件,系統(tǒng)采用后者。
學(xué)生通過用戶名和密碼登錄之后,通過HTTP協(xié)議中的Post請求方法向服務(wù)器發(fā)送請求,服務(wù)器返回Cookie,驗證賬號和密碼正確之后返回響應(yīng)信息。最終利用Jsoup解析獲取信息。信息以ListView顯示在界面中,ListView條目顯示需要Adapter提供服務(wù)。
由客戶端向服務(wù)器發(fā)送Post請求發(fā)送部分代碼如下:
name = new String(name.getBytes("GBK"), "ISO-8859-1");
HttpClient client = new HttpClient();
client.getHostConfiguration().setHost(partUrl, 80);
PostMethod post = new PostMethod(url);
NameValuePair submit = new NameValuePair("Submit", "提交");
NameValuePair tgname = new NameValuePair("tgname", name);
NameValuePair tgpwd = new NameValuePair("tgpass", password);
post.setRequestBody(new NameValuePair[] { submit, tgname, tgpwd });
client.executeMethod(post);
Cookie驗證成功之后,服務(wù)器返回HTML文件,接下來將獲取的數(shù)據(jù)以流的形式讀入到一個buff緩沖字節(jié)數(shù)組中,部分代碼如下:
byte[] buff = Tool.readInputStream(post.getResponseBodyAsStream());
html_file = new String(buff, "GB2312")
接下來客戶端利用Jsoup對html_file解析出需要的數(shù)據(jù),將數(shù)據(jù)通過ListView顯示。
2.2.3 Jsoup進(jìn)行數(shù)據(jù)解析
在整個客戶端開發(fā)過程中,Jsoup解析是關(guān)鍵,學(xué)校服務(wù)器無法返回XML或者Json文件,只能通過分析HTML文件的方法獲取所需要的信息。以公告信息為例,服務(wù)器返回的網(wǎng)頁源代碼HTML文件如圖3所示。
圖3 服務(wù)器返回HTML部分信息
通過對源代碼分析可知, HTML文件中的關(guān)鍵信息以DataList為節(jié)點,DataList下面的子節(jié)點皆為公告信息條目,為此只需要解析到DataList以及下面的子節(jié)點即可,這里根據(jù)顯示的信息需要Title以及Url。部分核心代碼如下:
Document document = Jsoup.parse(new URL(url), 10000);
Element element = doc.getElementById("DataList");
Elements tags = element.getElementsByTag("a");
for(Element ele : tags){
String aText = ele.getElementsByTag("a").text();
String aLink = ele.getElementsByTag("a").attr("href");
String href = partUrl + aLink.substring(2);
Map
map.put("title ", aText);
map.put("url ", href);
list.add(map);}
用戶使用過程中有可能出現(xiàn)沒有網(wǎng)絡(luò)的情況,因此處理過的數(shù)據(jù)將被保存到本地的一個文件中,離線情況下可調(diào)用顯示該文件。
2.2.4 地圖顯示
二維地圖的顯示主要通過調(diào)用百度地圖API,通過MapView以及BMapManager類,前者用于添加百度地圖控件,后者是加載地圖的引擎[5]。
通過這兩個類實現(xiàn)所需功能,例如:地圖縮放功能,部分代碼如下:
mapView.setBuiltInZoomControls(true);
mapController = mapView.getController();
mapController.setCenter(geoPoint);
mapController.setZoom(n);
街景的顯示一般有兩種形式,一種是利用經(jīng)緯度生成GeoPoint獲取街景,另一種利用街景點的ID獲取街景,在本系統(tǒng)中利用經(jīng)緯度獲取街景。
本系統(tǒng)通過一個StreeGeoData類實現(xiàn)對數(shù)據(jù)封裝,類里面定義了經(jīng)緯度以及縮放比例等。在StreetOverLay類繼承了ItenmizedOverLay類,通過對StreeGeoData封裝數(shù)據(jù)的處理,可以實現(xiàn)顯示不同的圖層圖片,并可以對圖層自定義,包括標(biāo)記興趣點等。最后通過StreeView中將街景顯示。StreetView類繼承于StreetViewListener,實現(xiàn)圖層的監(jiān)聽,包括獲取圖層,銷毀,啟動,停止等方法。部分代碼如下:
public StreetGeoData(int x, int y, Bitmap marker, Bitmap markerPressed, float offset){
this.latE6 = x;
this.lonE6 = y;
this.marker = marker;
this.markerPressed = markerPressed;
this.heightOffset = offset;
this.uid = “”;}
public ItemizedOverlay getOverlay() {
if (overlay == null) {
ArrayList
overlay = new StreetOverlay(geos);
overlay.populate();}
return overlay;}
此時通過向Handler發(fā)送數(shù)據(jù)來顯示圖片,Handler處理如下:
mHandler = new Handler() {
public void handleMessage(Message msg) {
mImage.setImageBitmap((Bitmap)msg.obj);}};
3 系統(tǒng)實現(xiàn)
系統(tǒng)界面簡潔,主界面上方做出跑馬燈效果介紹學(xué)校概況,主界面如圖4所示。
圖4 主界面顯示圖
3.1學(xué)生登入模塊實現(xiàn)
登錄模塊主要實現(xiàn)的功能:
1)連接網(wǎng)絡(luò),輸入賬號、密碼驗證,如果不成功則提示;
2)登錄成功以后可查看相關(guān)成績和課表信息;
3)響應(yīng)時間較快。
學(xué)生查看成績?nèi)鐖D5所示。
3.2教務(wù)公告信息實現(xiàn)
教務(wù)信息和公告信息的獲取方法非常類似,本模塊主要實現(xiàn)功能如下:
1)有網(wǎng)的情況下,通過網(wǎng)絡(luò)連接顯示信息;
2)無網(wǎng)絡(luò)的情況下,從緩存調(diào)取顯示信息。
教務(wù)信息顯示如圖6所示:
3.3 校園地圖實現(xiàn)
本系統(tǒng)實現(xiàn)了二維地圖顯示如圖所示,功能如下:
1)可通過當(dāng)前位置顯示周邊地圖;
2)可對地圖進(jìn)行縮放設(shè)置。
通過點擊查看街景地圖可轉(zhuǎn)換到街景查看,如圖7所示。
4 總結(jié)
基于手機客戶端的數(shù)字化校園普及仍需加大力度,本文以Android系統(tǒng)為開發(fā)平臺,實現(xiàn)了一款校園助手系統(tǒng),通過該系統(tǒng)可方便學(xué)生隨時隨地查看信息,系統(tǒng)中數(shù)據(jù)獲取和解析的方法具有一定參考性。有關(guān)地圖實現(xiàn)部分,如何在地圖上添加標(biāo)記以及為校內(nèi)建筑物重新命名是下一步要解決的問題。
參考文獻(xiàn):
[1] 林永興,李曉蕾. 基于Android的校園助手手機應(yīng)用程序的研究與設(shè)計[J]. 高科技產(chǎn)品研發(fā), 2012(3):60.
[2] 李剛. 瘋狂Android講義[M].北京:電子工業(yè)出版社.2011.
[3] 姚昱 .基于Android的移動學(xué)習(xí)終端平臺的開發(fā)與研究[D].長沙:中南大學(xué),2008.
[4] Jsoup: Java HTML Parser[EB/OL].http://jsoup.org.
[5] 百度地圖API[EB/OL].http://developer.baidu.com/map.