周剛
(四川理工學院計算機學院,四川自貢643000)
基于網頁數據提取的灌溉監(jiān)控Android客戶端系統(tǒng)
周剛
(四川理工學院計算機學院,四川自貢643000)
為了解決移動灌溉監(jiān)控中用戶體驗不佳,達不到良好移動監(jiān)控效果的問題,提出并設計了基于Android平臺的灌溉監(jiān)控客戶端系統(tǒng)。所設計系統(tǒng)規(guī)避了網站無數據接口的問題,采用數據間接訪問方式實現數據獲取。給出了數據獲取原理,分析了Android灌溉監(jiān)控客戶端功能,并給出實現的具體方法。經過測試表明,系統(tǒng)具有良好的用戶體驗,滿足了移動灌溉監(jiān)控的需要,具有良好的實用價值和推廣價值。
網頁數據提??;Android;灌溉監(jiān)控;客戶端
隨著計算機網絡技術和無線通信技術的發(fā)展,遠程智能灌溉已經廣泛的應用于溫室種植、城市綠地節(jié)水灌溉,實現了現場的無人值守,同時,隨著Android智能手機的普及,用戶也多了一種遠程監(jiān)控的方式,即移動監(jiān)控。然而,雖然用戶可以通過手機瀏覽器來對灌溉監(jiān)控網站進行訪問,但在實際使用中由于手機屏幕大小受限,灌溉監(jiān)控網頁元素過多,會導致用戶體驗不佳,達不到良好的移動監(jiān)控效果,這也正是為什么要定制新浪微博、淘寶等Android客戶端軟件的原因[1]。
鑒于此,提出了基于Android平臺的灌溉監(jiān)控客戶端系統(tǒng)。系統(tǒng)不僅要實現用戶在有網絡通信的情況下,隨時隨地對現場情況進行監(jiān)控,還要具有良好的用戶體驗,做到真正的無人值守遠程監(jiān)控。
基于Android平臺的灌溉監(jiān)控客戶端系統(tǒng)屬于網站客戶端軟件,這類軟件最突出的特點就是,先有網站再有客戶端軟件,通過手機客戶端軟件來改善用戶體驗。目前大多Android網站客戶端開發(fā)是通過服務端開放相應的數據API接口,經過OAuth認證授權,來獲取數據庫后臺數據,一般是一些面向公眾的平臺,如:豆瓣網、騰訊微博等[2_3]。
本文中的遠程灌溉監(jiān)控網站在開發(fā)時沒有開發(fā)服務端的任何數據接口,同時為保證后臺數據庫服務器的安全,限制了訪問權限,因此不能直接從網站數據庫獲取數據。然而對于灌溉監(jiān)控Android客戶端而言,監(jiān)控網頁中顯示的數據才具有實際意義,因此我們可以從網頁中把需要的數據提取出來,只要網頁中能看到的數據,客戶端都能獲取到。即基于網頁數據提取的Android客戶端開發(fā)模式。
網頁數據提取,其實質是對數據庫的間接訪問。其原理是在Android客戶端模擬瀏覽器執(zhí)行POST或GET請求,通過對服務器返回的嵌套了返回數據的靜態(tài)html頁面進行解析,提取指定標簽的數據,對應顯示到Android客戶端。
圖1所示為灌溉監(jiān)控系統(tǒng)網站的主頁面。
圖1灌溉監(jiān)控系統(tǒng)主頁面
從該頁面可以看出灌溉監(jiān)控系統(tǒng)主要實現監(jiān)控點數據的查詢、監(jiān)控時間間隔設置、數據的實時刷新、工作模式設定(手動/自動)、電磁閥開關設定、土壤水分上下限設定。在Android客戶端設計上,由于智能手機屏幕大小受限,為了達到良好的用戶體驗,我們把最重要的、常用的關鍵功能提取出來,舍去一些不常用的功能,進行簡化設計,如時間間隔設置和土壤水分上下限設定一般是固定的,因此可以省略,以節(jié)約屏幕空間;另灌溉監(jiān)控客戶端主要關心實時數據的變化,以及由此產生的相應控制操作,因此對于歷史數據的查詢意義不大。固在監(jiān)控客戶端設計上主要實現實時數據的報警,以及相應的控制功能和工作模式的設定。通過前文分析,對于實時數據的監(jiān)測其本質是實現網頁數據的實時提取,因此灌溉監(jiān)控Android客戶端的核心是如何從服務器返回的靜態(tài)頁面中提取請求返回的數據。
2.1 監(jiān)控數據提取流程分析
監(jiān)控數據提取流程如圖2所示。
首先根據目標地址實例化POST或GET方法來模擬瀏覽器執(zhí)行POST或GET請求,其目標地址即為圖1所示網頁的地址;然后為請求添加相應的鍵值對,如圖1中的地點選擇下拉選項、工作模式選擇和電磁閥開關控制,設定好以后,進行提交,WEB服務器響應返回包裹了請求數據的一個靜態(tài)html頁面,頁面中監(jiān)測數據是用table標簽的單元格來顯示,即查詢返回的數據包裹在html頁面中的td標簽里。html頁面其本質可以看作是由字符流組成,因此轉化成對字符流解析操作。
解析工作借助于JsouP。JsouP是一個Java開源html解析器(來自org.jsouP包)[4_5],支持Document類,一個Document又由elements組成,可以在Document中通過它的select方法獲取指定的elements,如在html代碼中查找以“tr”開頭的標簽,通過document.select(“tr”)來完成,找到后以elements數據類型進行保存,形成tr元素群,通過元素群進行進一步的數據解析,如在tr元素群中,查找指定表格行的單元格,通過elements的get()方法和select()方法來完成,實例如:trs.get(i+2). select(“td”),即從每個tr中選出td標簽元素群,最后通過elements的html()方法來獲取指定標簽括起來的內容,這樣就完成了數據的解析。
圖2網頁數據獲取流程圖
2.2 灌溉監(jiān)控Android客戶端功能設計
灌溉監(jiān)控Android客戶端分為控制頁面和數據監(jiān)控頁面以及報警控制??刂祈撁姘üぷ髂J降脑O定和電磁閥的開關控制,這些操作是一次性請求,沒有返回數據,直接通過無線網絡對現場控制設備進行控制,由相應的嵌入控制程序來完成。
數據監(jiān)控頁面負責實時的展示現場數據,是一個動態(tài)的、實時的數據讀取過程,即要求Android客戶端根據監(jiān)測頻率重復的模擬瀏覽器POST或GET操作,因此把數據讀取做成Service形式,在Android后臺運行[3]。監(jiān)控頁面只負責數據的顯示。
報警控制用于土壤水分傳感器數據超限時,模擬啟動電磁閥開關,無需界面展示,而是以消息窗的形式進行提示,數據超限監(jiān)控也是實時、動態(tài)的,在后臺運行,故也做成Android的Service。
從前面的分析中,可以得知灌溉監(jiān)控Android客戶端的核心是網頁數據獲取并解析的過程,因此只要完成這一過程,客戶端系統(tǒng)就已基本實現。開發(fā)過程中,開發(fā)工具選用EcliPse3.5+JDK1.6+SDK+ADT,開發(fā)平臺選用Android2.2版本,并借助HtmlWatchhtml代碼觀察器來輔助開發(fā)[6]。
實現過程劃分為兩步進行:第一步,模擬瀏覽器執(zhí)行POST或GET請求;第二步,數據解析與顯示。
3.1POST或GET請求實現
模擬瀏覽器POST或GET請求通過HttPClient類來實現,實現中導入HttPClient的4個包:commons-co_ dec、commons-httPclient、commons-logging、log4j[7]。首先實例化一個HttPClient對象,設置Host地址和端口號,即請求頁面地址,用目標地址實例化一個POST或GET方法,寫出所需要的鍵值對,如:地點選擇,然后調用HttPClient實例對象的executeMethod方法,提交POST或GET方法,返回的html以流的形式讀入,存放在一個buffer緩沖字節(jié)數組中,格式化String類型保存,最后釋放連接。示例代碼如下:
//例化HttPClient
HttPClientclient=newHttPClient();
//設置Host地址端口是S0
client.getHostConfiguration().setHost(“httP:// ggjkxt.com”,S0);
//用目標地址實例一個POST方法
PostMethodPost=newPostMethod(“httP://ggjkxt. com/IlaswebBib”)
//將需要的鍵值對寫出來
NameValuePairsubmit=newNameValuePair(“submit”,“刷新數據”));
NameValuePairvName=newNameValuePair(“v_ name”,“0”);
//給POST方法加入上述鍵值對
Post.setRequestBody(newNameValuePair[]{submit,vName});
//執(zhí)行POST方法
client.executeMethod(Post);
//將POST返回的數據以流的形式讀入,再把輸入流流至一個buff緩沖字節(jié)數組
//StreamTool類是自己寫的一個工具類,用于數據流讀取
byte[]buff=StreamTool.readInPutStream(Post. getResPonseBodyAsStream());
//將返回的內容格式化為String存在html中
Stringhtml=newString(buff);
//任務完成,釋放連接
Post.releaseConnection();
將該段代碼功能復制到Service的執(zhí)行方法中,設定Service監(jiān)控頻率即可。
3.2 數據解析與顯示
在客戶端采用ListView(列表組件)來呈現數據,客戶端數據顯示界面如圖3示。
ListView中的數據由AdaPter(適配器)提供,AdaPter需要傳一個特殊容器(包含HashMaP的ArrayList),解析得到的數據就存放在這個ArrayList(數組列表)的HashMaP中,HashMaP是Android中的一種數據類型,用于存放鍵值對,如在該系統(tǒng)中的土壤水分含量數據。HashMaP構建好后,將其綁定到ArrayList,最后通過Li_ stView來顯示[S]。示例代碼如下:
List>list=newArrayList>();
//將html轉化成Document
圖3客戶端數據顯示界面圖
Document document=JsouP.Parse(htm l);
//選擇”tr”開頭的標簽,存入trs元素群中
Elements trs=document.select(“tr”);
//得到整個HTML中包含tr的標簽的個數
int total Trs=trs.size();
if(total Trs>0)
for(int i=0;i<total Trs;i++)
{
//從每個tr中選出td標簽元素群
Elements tds=trs.get(i).select(“td”);
//得到每個tr中td的個數
int total Tds=tds.size();
//臨時的Hash MaP,里面是String-Object鍵值對
MaPmaP=new Hash MaP();
//j是一個標識數
for(int j=0;j<total Tds;j++)
{
switch(j){
//html()方法得到標簽括起來的內容
case 0:
maP.Put(“ad_name”,tds.get(j).html().to String());
break;
case 1:
//獲取土壤水分數據
maP.Put(“water”,tds.get(j).html().to String());
MaP里即為存放的提取土壤水分含量等數據。
灌溉監(jiān)控Android客戶端是一個具有時效性的系統(tǒng),與原有灌溉監(jiān)控網站相比,采用的是無線傳輸網絡(Wifi或移動通信),這里對數據監(jiān)控的時效性與原有網站的時效性進行對比測試,采用不同型號的Android手機分別基于Wifi和移動通信兩種通信方式來進行測試,測試結果見表1。
表1各手機參數與延時對比
從測試結果來看,在Wifi通信情況下,較高性能的手機產生的數據刷新延時比低配置手機略小,這主要受制于手機硬件本身;另采用Wifi通信的方式略好于移動通信方式,這主要是移動通信方式信號不穩(wěn)所致??傮w情況來看,其延時都在幾秒之內,對于灌溉監(jiān)控這種實時性要求不高(采集頻率一般以小時計算)的系統(tǒng),在實際使用中基本沒有影響。
灌溉監(jiān)控Android客戶端系統(tǒng),通過網頁數據提取的方式規(guī)避了原監(jiān)控網站無API數據接口的問題,滿足了灌溉監(jiān)控移動辦公需要,取締了遠程無人值守,其具體的實現過程具有一定的借鑒意義。良好的用戶體驗和較高的時效性,使得灌溉監(jiān)控更具有時效性和便捷性,具有很大的實用價值。
[1]汪永松.Android平臺開發(fā)之旅[M].北京:機械工業(yè)出版社,2010.
[2]李興華.名師講壇:Android開發(fā)實戰(zhàn)經典[M].北京:清華大學出版社,2011.
[3]李剛.瘋狂Android講義[M].北京:電子工業(yè)出版社,2011.
[4]吳建華,徐浩,丁月華.移動網絡手機實時監(jiān)控系統(tǒng)的設計與實現[J].計算機工程與設計,2010,31(10): 2196_2198.
[5]Bailey J.Live video streaming from Android_enabled devices to Web browsers[D].Florida,USA:University of South Florida,2011.
[6]周剛,王小玲.氣田移動監(jiān)測系統(tǒng)的設計與實現[J].四川理工學院學報:自然科學版,2013,26(1):43_46.
[7]閆偉,葉建栲.多線程技術在Android手機開發(fā)中的應用[J].信息通訊,2012(1):46_47.
[8]賈文杰,孫志峰.基于Android平臺的智能導游系統(tǒng)[J].機電工程,2011,28(10):1257_1259.
Irrigation Monitoring Android Client System Based on Webpage Data Acquisition
ZHOU Gang
(School of ComPuter Science,Sichuan University of Science&Engineering,Zigong 643000,China)
In order to resolve the Problem of Poor user exPeriencewhichmakes themobilemonitoring effect satisfied not better in mobile irrigationmonitoring,an irrigationmonitoring client system based on android is ProPosed and then designed. The designed system avoids the Problem that have no data interface in existing website,and acquires data by using indirect ways of access to data.The theory of data acquisition is given,the function of android irrigation monitoring client system is analysed,and the concrete realizationmethod is Produced.According to a system test,the system has good user exPerience,meets the needs ofmobile irrigation monitoring,and has good Practical value and Promotional value.
WebPage data acquisition;Android;irrigation monitoring;client
TP311.52
A
1673_1549(2014)02_0051_05
10.11863/j.suse.2014.02.11
2013_10_29
人工智能四川省重點實驗室開放基金項目(2012RYY01)
周剛(197S_),男,四川南充人,講師,碩士,主要從事人工智能與移動應用方面的研究,(E_mail)tanker197S@126.com