<nav id="w0g0m"><code id="w0g0m"></code></nav>
  • <xmp id="w0g0m">
    <xmp id="w0g0m"><nav id="w0g0m"></nav><menu id="w0g0m"><strong id="w0g0m"></strong></menu>
  • <xmp id="w0g0m">
  • <nav id="w0g0m"></nav>
    <menu id="w0g0m"><menu id="w0g0m"></menu></menu>
    1. 網站地圖
    2. 設為首頁
    3. 關于我們
    ?

    基于 Android 與 Web Services 的灌區信息管理系統

    發布時間:2022-12-25 11:12
    目 錄
    第一章 緒論 1
    1.1課題的研究背景 1
    1.2國內外研究發展現狀 2
    1.3課題研究意義 3
    1.4 論文的主要內容與章節安排 4
    第二章 相關技術 5
    2.1移動通信技術 5
    2.1.1移動通技術簡介 5
    2.1.2本文采用的移動通信技術 8
    2.2Android 技術 9
    2.2.1Android 簡介 9
    2.2.2Android 的概念 10
    2.2.3Android 體系結構 10
    2.2.4Android 的基本組件 13
    2.3WebServices 技術 18
    2.3.1Web Services 簡介 18
    2.3.2Web Services 主要技術 19
    第三章 系統的總體方案設計 23
    3.1系統背景 23
    3.2需求分析 24
    3.2.1業務需求分析 24
    3.2.2系統需求分析 26
    3.3系統的部署 27
    3.4系統的總體架構 29
    3.4.1各架構的對比 29
    3.4.2本文選擇的系統架構 31
    第四章 移動終端的設計與實現 33
    4.1 移動終端功能模塊 33
    4.2移動終端的操作流程 35
    4.2.1主程序的操作流程 35
    4.2.2水票驗證的操作流程 36
    4.2.3申請購水的操作流程 37
    4.3移動終端軟件的結構 38
    4.4移動終端的實現 39
    4.4.1開發環境的配置 39
    4.4.2調用 Web Service 46
    4.4.3主要模塊和方法 47
    第五章 服務器端的設計與實現 53
    5.1服務器端的功能模塊 53
    5.2Web 服務的設計 54
    5.3數據庫的設計 55
    5.3.1數據庫框架的設計 55
    5.3.2數據庫表的設計 56
    5.4服務器端的實現 59
    5.4.1 軟件需求 59
    5.4.2開發工具的安裝過程 60
    5.4.3Web Service 服務器的具體實現 62
    第六章 測試與驗證 73
    6.1測試目的 73
    6.2測試環境的選擇 73
    6.3測試結果 73
    總結和展望 77
    參考文獻 81
    致謝 85
    攻讀碩士學位期間發表的學術論文 87
    第一章 緒論
    1.1 課題的研究背景
    我國不僅是一個人口大國,也是一個農業大國,但是我國的水資源僅占全世 界平均水平的 1/4[1],名列 110 位,且分布極不平衡,已經屬于水資源貧困的范 疇[2]。眾所周知,灌溉用水是農業發展的重要組成部分[3],而農業又是一個國家 發展經濟的主要支撐[4]。但是在我國一些地區,灌溉用水嚴重浪費[5]。據調查, 我國的農田灌溉水利用系數僅為 0.5 左右[6],再加上水資源短缺的矛盾,其已經 成為我國發展現代化農業的瓶頸。所以加強農田灌溉用水的工作顯得十分必要。 目前,我國一些地區的農田灌溉系統主要存在以下現象[7]:
    1.農田灌溉系統管理中心在實施灌溉作業時,沒有結合當地的降水情況和天 氣預報等信息。只是簡單的按時間計劃進行灌溉,譬如說近期氣候干旱,農作物 嚴重缺水,農田灌溉管理系統中心沒有掌握及時的信息導致作物產量嚴重下降, 給農民帶來巨大的損失。或是正在進行灌水作業時,突然有急雨出現,農田灌溉 管理系統沒有及時地停止作業,同樣給農業生產帶來嚴重的后果。
    2.農田灌溉管理系統中心對所管轄農田的配水量往往出現或多或少的偏差。 配水量的多少,完全由農民根據自己的經驗情況而定。而農民沒有經過專業指導, 很難做到科學地掌握灌溉量的大小。
    3.為了做到工作的方便,農田灌溉管理中心采取統一繳費,統一灌溉的方式。 在灌水時間臨近的時候,灌溉管理中心通知所有的農戶進行繳費灌水,往往個別 用戶的不及時繳費導致其他用戶不能按時完成灌水作業。
    4.農戶繳費完后,領取繳費證明,再到農田現場向現場配水操作人員證明后, 方可能完成灌水作業。農戶不能在農田現場直接與現場配水操作人員完成繳費, 進而完成灌水作業,給農戶工作帶來了極大地不便。
    上述現象主要是農田灌溉系統管理中心沒有及時掌握氣象信息或是與農田 現場操作人員沒有做到有效地溝通而導致灌溉效率的降低。造成這些的主要原因 是各個部門之間沒有良好的信息溝通。
    當移動互聯網還處于 2G 時代時,移動電話還主要被用于基本通話,并且還 只限于一些高消費人群。人們對一個手機的評價還主要在通話質量這一方面,當 然這也是所有運營商和制造商關注的焦點和提高服務工作的重點。隨著技術的發 展和人們日益增長的需求[8],當移動通信進入 2.5G 時,移動電話已不再是簡單 的電話,人們可以通過移動電話進行瀏覽網頁等一些簡單的操作。這時一些手機 APP 已經呈現出來,也逐漸改變著人們對手機的認識,并且手機消費也逐漸適應 于普通大眾。目前,我國已經進入4G移動互聯網時代,并且相對領先世界其它 國家。這時,無論是網絡傳輸速度還是手機性能都不可同日而語,且手機 APP 也發生了翻天覆地的變化。再加上手機的攜帶十分方便和價格非常低廉,一部高 性能手機對于普通百姓來說,已從“奢侈品”變為“必需品”[9]。當然人們也對 手機賦予新的需求,許多原先只能在PC機上才能運行的APP、信息化系統甚至 辦公軟件都逐漸向移動設備上轉移,并且這種趨勢是有增無減。越來越多的人們 期望通過手機登陸互聯網,完成自己的需求[10]。
    移動互聯網無形之中改變著現代人的生活方式和工作模式,也改變著人們的 思維方法。如今,只要擁有一部智能手機,就可以隨時隨地查詢想要查詢的信息。 這種便利性,對現代人工作效率的提高起到很大的促進作用!
    現有的通信技術正好能解決農田灌溉系統中灌溉效率低下的現象。在這種背 景之下,如何利用現有的移動通信技術,解決農田灌溉系統中存在的弊端,使農 田灌溉用水得到有效的利用,已經成為一個不可忽略的話題[11,12]。同時,這也是 農業走向工業化和信息化的有效途徑。
    1.2 國內外研究發展現狀
    在向農業現代化邁進的過程中,信息技術已經不知不覺滲透到農業各個領域。 互聯網應用對農業發展的影響力也越來越大,甚至在一定程度上對農業的發展起 到決定性的作用[13]。近年來,許多IT公司也爭相向農業生產及相關領域涌進, 在農業生產、經營各個方面都可以看到它們的身影,并且競爭也是非常激烈[14]。 例如:江蘇移動為本省的農民開展了一系列面向“三農”的信息服務。當地農民可 以通過移手機 APP 查看農業生產方面的信息,比如種植技巧、作物施肥、農業 灌水、產品供求信息以及農業新聞等。也可以通過手機 APP 向農業專家在線尋 求幫助,以最短的時間解決農民農業生產方面的困惑。在我國一些地區的農民已 經實現了利用移動互聯網遠程監控農作物的生長情況,如土壤水分等,并遠程控 制并完成作物的灌溉。在農業自動化灌溉系統中,利用水管水壓傳感器檢測配水 管中水壓的大小,進一步控制水泵功率,進而達到有效的節約用水,并且使農作 物產量達到最優的經濟效益。
    在農業發達的以色列,農民在家就可遠程控制農作物的灌溉[15]。利用各種不 同的傳感器采集作物的生長信息,例如土壤成分含量、水分濕度以及作物生長的 溫度等數據[16]。并通過無線網絡將采集的信息傳到家里的PC機上,然后結合已 經建立的數學模型對作物進行遠程操作,在灌溉時間和灌溉用水量上做到科學合 理的控制[17]。
    為了提高我國農業灌溉技術的發展,加快我國農業現代化發展的速度,我國 各級部門也做出了巨大地努力,比如鼓勵高校加大對農業灌溉技術的科研力度, 學習國外先進技術和購買國外先進設備等,但基本處于科研試驗階段,很難做到 大力推廣。再加上各地的自然環境和農作物的差異,并沒有在全國獲得普及。我 國也有一些自主研發的自動化灌溉系統,但是由于一次性投入的成本過大,大多 數農民在經濟上望而卻步,極大的限制了自動化灌溉系統的發展。
    1.3 課題研究意義
    目前,我國在農業自動化灌溉中投入了大量的資金和設備,但由于沒有做到 良好的信息交互,這些設備的價值沒有完全體現出來。在現場實地操作的工作人 員,不能實時地掌握農田灌溉系統管理中心的信息,導致農民在作物灌水作業時, 需要多次與灌溉管理中心和現場操作人員進行溝通,給農民的生產帶來了極大地 不便。
    本文提出了一種基于 Android 和 Web Services 技術的農田灌溉信息管系統, 農田灌溉管理局通過現場勘察人員的實地勘察,掌握農作物的生長情況,并對所 管轄地區的農民提出相應的作物灌溉意見和安排。農民根據農田灌溉管理局的意 見,按時向農田灌溉管理站交納水費,管理站根據農田灌溉管理局的意見開取相 應的憑證,并將數據錄入數據庫。在農田現場,農民向現場配水操作人員出示繳 費憑證,配水操作人員通過移動手機 App 查詢繳費情況,完成作物的灌水。農 民也可以直接向現場配水操作人員繳費,現場配水操作人員通過手機 App 查詢 相應的信息,并完成數據的錄入,最終完成配水作業。達到到信息的互通和工作 效率的提高。
    1.4 論文的主要內容與章節安排
    第一章緒論部分介紹了我國農業用水的現狀和目前移動互聯網的便利性及 國內外在農田灌溉這方面的發展現狀,說明設計灌區信息管理系統的必要性和可 實施性。
    第二章介紹灌區信息管理系統中所涉及到的相關技術,如移動通信技術、 Android 技術以及 Web Services 技術等。
    第三章介紹總體方案的設計。首先提出了灌區信息管理系統的總體需求,分 析和對比各種設計架構。然后根據需求選擇和設計出適合本課題的總體架構圖。 最后介紹了系統的總體結構框圖。
    第四章詳細介紹了 Android移動終端的設計與實現。根據需求,對移動終端 的功能模塊和實現過程做了詳盡的介紹。
    第五章介紹并完成Web Services服務器端的設計與實現。主要完成Web服務 和數據庫等后臺的設計,并為Android提供相應的接口,以供Android終端App 調用。
    第六章對本設計的工作總結和展望。根據灌區信息管理系統中存在的一些缺 陷進行分析,并在下次工作中得到有效的改善。
     
     
    第二章 相關技術
    2.1 移動通信技術
    2.1.1移動通技術簡介
    移動通信技術從誕生到現在,已經經歷了模擬、數字到3G(Third Generation) 的巨大進步[18],目前正向勢頭強勁超三代或第四代移動通信(B3G/4G)前進[19]。 其發展過程如圖 2-1 所示。
    1G 模擬通信 2G 數字通信 3G IMT-2000 B3G/4G IMT-Advanced
     
    圖 2-1 移動通信通的演進過程圖
    Fig 2-1 Mobile communication development process diagram
    模擬移動通信被稱為第一代移動通信,技術種類為 AMPS( advantage mobile phone system,高級移動電話系統),最早出現于美國公共移動通信業務中,隨后 在德國、法國、英國等國家也相繼研制出類似的公共汽車電話系統[20]。最初的 模擬移動通信的主要表現為:用戶少、容量小而且頻譜利用率低[21]。由于當時 采用的是分立元件技術,那時的通信設備既占用體積空間大又非常耗能。隨著集 成電路和微處理器的發展,模擬移動通信技術也取得巨大成功。但是隨著用戶的 迅速增多、頻譜利用率低、安全性、價格方面以及它只能提供一般語音通訊服務, 不能提供資料傳輸等缺點,很快被新一代通信技術所取代。
    2G 主要分為 TDMA (Time Division Multiple Access,時分多址)和 CDMA
    (Code Division Multiple Access,碼分多址)[22]。與之前的通信技術相比,其最 大的特點是數字技術。 2G 時代的主要服務依然是在基本通話這一方面,不過已 經實現一些簡單的數據傳輸業務(例如:短信)。第二代移動通信克服了模擬移 動通信的弱點,在語音質量、安全性獲得了很大的進步。由于在發展過程中,沒 有形成統一的國際標準,用戶只能在同一制式的地區漫游,無法做到全球漫游, 當時各個地區的標準主要分為:GSM (Global System for Mobile Communications, 中文為全球移動通訊系統)、D-AMPS、PDC和CDMA。
    GSM系統是由歐洲通信特別小組GSM(Ground Special Mobile)研制的蜂窩 系統。它是在 FDMA(frequency division multiple access,頻分多址)基礎上,采 用的TDMA方式。GSM供的業務是通話業務、數據業務以及提供給用戶可選的 補充業務。其中通話業務包括:電話業務、緊急呼叫(移動電話中不一定需要 SIM 卡)、短消、個人商用號碼分開。數據業務是通過 GSM 網絡,完成文本文 件、圖像、消息、傳真等的發送。數據傳輸的速率有三種: 2.4kb/s,4.8kb/s,9.6kb/s。 相對于 1G 通信技術, GSM 的安全性有了極大的提高,網絡資源更加豐富,通 話質量也得到了極大的提高。
    D-AMPS 與 AMPS (先進移動電話服務)相似,是 AMPS 的數字版本。 D-AMPSIS-136 標準既支持室內又支持室外,這一特性可以極大的滿足尤其是在 高層框架結構建筑物中的客戶的通信。
    PDC 是只適用于日本的制式,它主要是為了和當時日本國內的第一代模擬通 信系統相兼容而制定的D-AMPS。相對于GSM,它的通話質量和網絡穩定性都 略顯欠缺,特別是在密閉環境內。 GSM、 D-AMPS、 PDC 這三種系統采用的都 是TDMA技術,但它們對TDMA都有各自的解釋,所以即便三者都采用TDMA 技術,還是不能相互兼容,做到相互間的漫游。
    CDMA 為另一種多址無線通信技術,它既非頻分也非時分。它與 FDMA 和 TDMA的多址方式劃分示意圖如圖2-2所示。
    HH
    FOMA
     
    圖 2-2 FDMA TDMA CDMA 的示意圖
    Fig 2-2 Schematic diagram of FDMA TDMA CDMA
     
    CDMA 的主要通信特點有:
    1.容量大。
    2.容量配置靈活。
    3.通信質量改善。
    4.頻率規劃簡單。
    5.手機待機時間延長。
    6.建網成本下降。
    由于第二代數字移動通技術依然不能滿足人們對數據業務傳輸增漲的需求, 人們開始著手3G技術的研究。其中GPRS (General Packet Radio Service,通用 分組無線服務技術)[23,24]和 EDGE (Enhanced Data Rate for GSM Evolution,增強 型數據速率 GSM 演進技術)就是 2G 到 3G 演進的中間技術,也就是人們俗稱 的 2.5G。
    3G 作為新一代移動網絡系統,相對于前兩代移動通信技術不僅僅是在網絡 傳輸速度上有所提高,它最大的特點是將當前最流行的無線通信技術互聯網進行 有效的融合,形成今天的移動互聯網技術。3G手機在通貨質量上也有很大的提 高,并且網絡覆蓋范圍和靈活性也得到較大的改善。除此之外, 3G 手機還提供 了無線多媒體業務,其中視頻電話就是3G手機的主要特點之一,人們可以通過 3G 手機進行視頻會議等。 3G 技術在全世界主要分為 CDMA2000、 WCDMA、 TD-SCDMA。這里的TD-SCDMA為我國研發的技術。在以上三種技術中,其中 CDMA2000 采用的標準是 MC-CDMA, WCDMA 采用的標準是 DS-CDMA, TD-SCDMA 采用的標準是 TDD-SCDMA 。 TD-SCDMA 的全稱是 Time Division-Synchronous Code Division Multiple Access,時分同步的碼分多址技術, 是我國自主研發并被ITU接受的3G技術。它能夠實現城市或大學等人口密集區 提供高密度大容量通話、數據傳輸和多媒體等業務。既可以單獨運營來達到 ETSI/UMTS 和 ITU/IMT-2000 的要求,又可以與其它無線技術相配合。 WiMAX 是繼前三種技術之后的另一項3G技術,它能夠提供更高的傳輸速率,最高可達 到30M的傳輸速率,傳輸距離更遠(50km),覆蓋面積是3G發射塔的10倍。 正是由于這一系列的優勢,使得WiMAX迅速引起了個大廠商的興趣。
    2009 年工信部向我國三大運營商發布 3G 牌照,標志著我國正式進入了 3G 時代。
    4G是目前新一代的移動通信技術,其傳輸速度可以達到普通家用寬帶ADSL (4 兆)快 25 倍。這種高網速能提供流暢的視頻、電話會議等幾乎人們所有的 服務的需要,具有不可比擬的優勢。不過4G移動通信系統由于采用扁平的網絡 架構,不能繼承3G網絡中軟切換這一優勢[25]。
    ITU 于 2012 年通過的標準包括: LTE-Advanced: LTE (Long Term Evolution, 長期演進)的后續研究標準;Wireless MAN-Advanced(802.16m): WiMAX的后 續研究標準。 TD-LTE 是由中國移動聯合其它通信公司共同研制并制定的 4G 標 準[20]。工信部于2013年12月4日向我國三大運營商頒發4G牌照,正式標志著 我國進入了 4G 時代。其中中國移動一共擁有 130MHz 頻譜資源,分別為 1880-1900MHz、2320-2370MHz、2575-2635MHz;中國聯通獲得 40MHz 頻譜資 源,分別為2300-2320MHz、2555-2575MHz;中國電信獲得40MHz頻譜資源, 分別為 2370-2390MHz、 2635-2655MHz。
    2.1 .2本文采用的移動通信技術
    目前,我國已經進入4G時代,但是由于4G網絡覆蓋和資費高以及LTE終 端設備當前有耗電量太大和價格昂貴的缺點,導致 4G 的應用還不是相當普及。 本文的農田灌溉信息管理系統主要是進行一些簡單的數據傳輸,最大也是對照片 的傳輸,在傳輸數據時, 3G 網絡足以滿足要求。考慮到上述原因,本文主要采 用3G和2G網絡實現。
    2.2Android 技術
    2.2.1Android 簡介
    隨著3G網絡的普及,4G技術的迅猛發展,以及硬件運算速度的不斷加快, 再加上各種 APP 的便利性,智能手機逐漸走入了人們的日常生活,使得手機不 再僅僅是一部手機,更像一臺電腦。人們可以在手機上實現以往不能實現的功能, 比如說E-mail、網頁瀏覽、視頻播放、照相攝影以及電子地圖等。手機里的各種 功能給我們帶來無比的便利,我們從目前的手機銷售數量上可以看到人們對手機 的需求性。通信資費的持續降低、云技術的不斷發展、互聯網已經變的唾手可得, 在這種大背景下,智能手機終將成為人類生活中的一個不可或缺的工具。而在智 能手機中,Android系統已經成為大多數手機的追尋者,并且由于其開源的特性, 大大地降低了手機的使用成本[25]。如今,移動設備的操作系統包括:Android、 iOS、Firefox OS (謀智)、YunOS (阿里巴巴)、BlackBerry (黑莓)、Windows phone (微軟)、symbian、Palm、BADA、Windows Mobile> ubuntu。其中 Android 和 蘋果的iOS表現的最為突出,但是Android又具有許多iOS沒有的優勢[26],通過 圖 2-3 的對比我們便可了解。
    Android iPhone
    可以在PC、MAC和Linux下開發 只能在MAC下開發
    以Linux為基礎 以Mac OS基礎為
    Java ObjectiveC
    25美元 每年99美元
    可以通過WEB下載應用程序 只能在App Store下載應用程序
    支持Flash 不支持Flash
    Google、ARM、高通、三星... Apple
    超過5000000個應用程序 超過1000000個應用程序
    圖 2-3 Android 與蘋果的對比圖
     
    Fig 2-3 Android vs iPhone
    從上圖可知,無論在開發環境還是開發成本以及適用范圍, Android 都優于 iOS,并且基于Android開發的應用程序遠遠多于iPhone的iOS開發的應用程序[27]。 所以本文在灌區信息管理系統的移動終端選擇 Android。
    2.2.2Android 的概念
    Android 一詞的本義指“機器人”,最早被安迪•魯賓制作成為手機操作系統[24]。 它是一種以 Linux 為基礎并且以 Java 語言為開發工具的操作系統[28]。它不僅應 用于手機、平板電腦,隨著越來越多的智能電子產品的出現,已經廣泛應用于如 智能手表、智能電視,甚至還用于汽車車載等其它一些移動設備[29]。Android操 作系統是基于 Linux 的開放核心架構[30],對于硬件設計制造充滿彈性,自 2007 年公布到現在,深受世界各地的手機制造商的支持,結合最新處理器及其配件, 不斷地推出各種智能手機,并且依照功能和價格提供消費者更加多樣化的選擇。 Android 有別于其他開發平臺,其應用程序的開發資源的獲取方式非常簡便,相 關工具均可從互聯網上獲取,并且適用于 Windows、 Linux、 Mac 等主流操作系 統[31],不受操作系統的限制,開發者只要使用 Java 語言就可以投入程序的編寫 [32],再加上標準架構類庫函數的調用與系統的互動,在降低設計與調試復雜度 的同時,也免除了許多非必要的工程負擔。
    2.2.3Android體系結構
    Android其本質就是在標準的Linux系統上增加了 Java虛擬機Dalvik,并在 Dalvik虛擬機上搭建了一個JAVA的應用框架,開發人員開發程序時,即是基于 該框架[33,34]。
    Android 不僅可以運行在 ARM 平臺上,還可以在 Windows、 Mac、 Linux 和 Chrome OS 平臺上。
    Android分為四個層,包括應用程序層(Applications)、應用程序框架層 (Application Framework)>系統運行庫層(包括程序庫和Android運行庫)和 Linux核心層(Linux Kernel) [35,36]。它們之間的關系如圖2-4所示:處于最上層 的 APPLICATIONS> 第二層的 APPLICATION FRAMEWORK 和 ANDROID RUNNTINME的Core Libraries是用Java語言實現的,Dalvik主要是負責運行Java 程序的虛擬機,LIBRARIES部分使用C/C++語言編寫的程序庫,Linux Kernel 部分為Linux內核,在Application Framework之下,由C/C++的程序庫組成,通 過 JNI (Java Native Interface,java 本地接口)完成從 Java 到 C/C++ 的調用。
     
    圖 2-4 Android 的體系結構 Fig 2-4 Android structure diagram
     
    1.Linux Kernel
    Android 內核是基于 Linux 2.6 內核增強版本,它隱藏和屏蔽底層細節,并為 上層服務,做到高內聚、低耦合特點。使得 Android 開發人員不需要知道 Linux 內核,就可以輕松開發 Android 應用程序。 Android 提供了許多核心驅動[37],包 括:
    (1)Binder( IPC, inter-process communication) Driver :它是基于 OpenBinder 框架的一個驅動,主要用于提供Android平臺中進程與進程間的通訊。
    (2)Power Managerment :電源管理。
    (3)Low Memory Killer:低內存管理器,相對于Linux標準的OOM (Out Of Memory),Low Memory Killer 表現的更加隨意自由。它可以根據需要,自動的 殺死一些線程。
    (4)USB Driver: Android 的 USB 驅動是基于 gaeget 框架的。
    (5)Android Log: Android Log是一個輕量級的日志設備,用于記錄Android 系統在運行過程中的各種日志。
    2.Android Runtime
    Android Runtime 包含一個核心庫和 Dalvik 虛擬機。
    Android 核心庫實現了 Java 標準部分的大部分內容,主要包括: Java 標準 API、Java擴展API、企業和組織提供的Java類庫。
    Dalvik虛擬機:一種基于寄存器的虛擬機,正是由于該特點使得Android上 的一些應用程序,尤其是經過虛擬機編譯后變大的,運行起來會相對流暢。不過 在未來,谷歌將刪除Dalvik,用ART代替。
    3.Libraries
    這里是一些C/C++類庫,通過Application Framework暴露給開發者。下面是 一些核心類庫:
    Surface Manager :界面管理。
    Media Framework:基于PacketVideo的OpenCORE。這些庫支持播放和錄制 許多流行的音頻和視頻格式,以及靜態圖像文件。
    SQLite: 一種輕型數據庫。
    Webkit:是一個開放源碼的自由軟件,可以驅動Android瀏覽器。
    SGL:基本的2D圖形引擎。
    FreeType:位圖和矢量字體渲染。
    3D庫:基于OpenGL ES 1.0 APIs的實現,開發人員可以通過該庫函數開發 出許多炫麗的游戲。
    4.Application Framework
    Application Framework包括一般Android應用程序所需要的所有基本功能以 及這些功能的接口。利用Application Framework,開發人員可以根據自己的需求 開發出許多功能各異的APP[38]O Android其實為開發人員提供了許多相應的框架 的API,開發人員可以根據手機的性能和硬件具備的傳感器等功能進行開發,為 編程人員開發程序提供了極大的方便。任何程序的某些功能模塊只要不違反 Android 的安全規定,就可以被其它任何程序所所調用。比如說,如今很多應用 程序都可以調用微信軟件的朋友圈功能來完成對本產品的宣傳。每一個框架都是 一組服務和系統, Application Framework 包括:
    (1)視圖( View)
    (2)內容提供者(Content Providers):通過該方法可以實現各個應用之間的數 據共享。
    (3)資源管理器(Resource Manager):提供非代碼數據的查看。
    (4)通知管理器(Notification Manager):開發者可以通過該模塊自定義警告, 并且可以將自己的需求在通知欄展示出來。
    (5)活動管理器(Activity Manager)o
    5.Applications
    Android系統已經集成一些主要的應用程序,包括E-mail、通訊錄和其它設置。所 有應用程序都是用 Java 開發并且我們可以根據自己的需求去開發自己的軟件。
    2.2.4Android 的基本組件
    Android 四 大 基 本 組 件 分 別 是 Activity , Service,Content Provider , BroadcastReceiver。這些組件都需要在 AndroidManifest.xml 中注冊。Activity, Service, Content Provider, Broadcast Receiver 與 AndroidManifest.xml 之間 的相互 關系可以用圖2-5表示。如果某個組件沒有在AndroidManifest.xml進行注冊,該 Activity> Service> Content Provider> Broadcast Receiver 所包含的內容和功能等, 將不會被 Android 系統可見,當然也就對應用程序來說也是沒有意義的。 BroadcastReceive 有兩種注冊方式,其中一種是在 AndroidManifest.xml 中進行配 置,這種方式與其它組件的注冊相同,由于這種方式是在程序運行之前用人工方 式進行配置的, 所以叫做靜態注冊;另一種方式動態注冊, Context.registerReceiver(),用這種方式注冊的 BroadcastReceive 類是一個匿名類。 用第一種方法注冊的 BroadcastReceive 會與系統的啟動而啟動,一直保持活躍狀 態,即使程序還沒有運行。
     
    圖 2-5 Android 的構成及其關系
    Fig 2-5 The composition of Android and their relationships
     
    AndroidManifest.xml: AndroidManifest.xml 是應用軟件的資源文件,有一點 像C++中的.rc文件,該文件中列出了各種Activity> Server及其權限,還有一些 監聽接口。比如添加一個Activity時就需要對該文件進行配置,或是應用程序需 要訪問網絡時,也要對其進行配置。 AndroidManifest.xml 文件中進行注冊格式如 下:
    <activity>元素用于聲明Activity子類,如果是程序初始化界面,也需要在屬 性中進行聲明。
    <service>元素用于聲明服務。
    <provider>元素用于聲明內容提供者。
    <receiver >元素用于聲明廣播接收器。
    Activity:打開Android手機的應用程序,我們看到的每一個屏幕就是一個 Activity。 Activity 主要負責應用程序門面的修飾,美化桌面,同時也負責應用程 序中一些主要數據信息的顯示。Activity通過一些控件(如:EditText、TextView、 Button、Menu)顯示在屏幕上,并且這些控件通過監聽等方式對響應用戶事件, 最終做到信息的人機交互。
    Activity 與 Activity 之間的通信是通過 Intent 中 startActivity(Intent intent)方法 進行的。它包含有7個生命周期函數,其Java代碼如下。
    public class Activity extends ApplicationContext {
    protected void onCreate(Bundle savedInstanceState);
    protected void onStart();
    protected void onRestart();
    protected void onResume();
    protected void onPause();
    protected void onStop();
    protected void onDestroy();
    }
    這7個函數Activity生命周期中的關系如圖2-6所示。在當一個Activity正 常啟動時會依次調用 onCreate()fonStart()—onPostCreate()fonResume()f onPostResume()。當一個 Activity 轉向另一個 Activity 時為 onPause()—onStop()。 按機器返回鍵, Activity 從另 一個 Activity 返回時, 依次調用 onRestart()—onStart()—onResume()—onPostResume()。按機器返回鍵,轉向上一 個 Activity 時,依次調用 onPause()—onStop()—onDestory()。當屏幕變黑,進入 待機狀態時會調用onPause()。屏幕變亮時,會依次調用待機狀態前Activity的 onResume()—onPostResume()。Home 鍵退出時,依次調用 onPause()—onStop()。 Home 鍵導航返回時,onRestart()—onStart()—onResume()—onPostResume()。旋 轉 屏 幕 時", onPause()f onStop()f onDestory()f onCreate()f onStart()— onPostCreate()—onResume()—onPostResume()。
     
     
    圖 2-6Activity 生命周期函數
    Fig 2-6 The Activity lifecycle function
     
    Service: Service 雖然在 Android 里不像 Activity 一樣被用戶看到,但它卻承 擔著大部分數據處理的工作,它在Activity中占的時間很長。比如說:在一個收 音機應用程序中,包含多個Activity,客戶可以根據自己的需要進行音量的調節、 是否錄音、頻道的選擇以及定時器的設置等。但是收音機主要是為了聽,所以在 軟件的使用中,大部分時間屏幕是可以保持黑屏的待機狀態從而避免屏幕開啟時 被誤操作并且可以達到節能效果。用戶在收音機播放時,可以選擇鎖屏和屏幕切 換到其他應用程序繼續運行。這時收音機的Activity會通過Context.startService() 方法啟動Service,進而達到收音機在后臺運行的效果。Android系統會將新啟動 的Service 一直執行到結束。系統也可以調用Context.bindService()方法,綁定一
    個Service。比如,收音機中通過“搖一搖”的功能進行進行更換頻道。
    Service 有兩種使用方法:
    方法一,調用 Context.startService()方法啟動,對應 Context.stopService()方法 結束。
    方法二,調用 Context.bindService()方法建立,對應 Context.unbindService() 方法關閉。
    所以Service的生命周期圖分為兩種,如圖2-7所示:
     
    圖 2-7 Service 生命周期圖
    Fig 2-7 The cycle of Service life
    Content Provider: Content Provider 主要負責數據的存儲,并允許一些應用程 序對其進行訪問,從而達到數據共享,比如:微信、易信及飛語等通話軟件都可 以對手機中的通訊錄信息進行讀取。這些數據可以存在于SQLite、文件系統中 或是其它合理的地方。Android可以通過自帶的Content Provider實現數據管理的 任務,比如:音頻、視頻、通訊錄的數據。
    Broadcast Receiver: Broadcast Receiver 是一種全局監聽器,它只能接收廣播, 并對廣播的通知做出反應。如:短信、微信、電池電量不足或者用戶改變了語言 偏好等。Broadcast Receiver與Service 一樣不提供圖形化用戶界面,但是當用戶 有新的通知或信息時,它可以調用其它組件如Activity通知使用者。
    2.3Web Services 技術
    2.3.1Web Services 簡介
    Web Services 是實現 Web 服務的一種技術, Web Service 是通過 Web 提供的 一種服務[39]。關于Web Service的定義有許多種,其中萬維網聯盟(World Wide Web Consortium,簡稱 W3C)組織這樣定義 Web Service: Web Service 是一個軟件 系統,該系統是一個用XML語言(尤其是WSDL語言)描述的URI (Uniform Resource Identifier統一資源標識符,簡稱URI)定義的軟件系統[40]。用URI描 述的定義可以被其他軟件系統發現,并且通過這些定義,軟件系統之間可以進行 相互交互,并且借助互聯網做到信息的交流。
    通過Web Services技術,位于各個PC終端或移動終端的應用程序不需要額 外的、特定的軟件或硬件,即可實現信息的交流和操作[41]。基于WebServices的 服務器端定義出一些資源讓客戶端應用訪問并獲取資源[42,43]。 WebServices 最大 的特點是不僅可以跨平臺、而且還可以跨語言交互,比如一個用java[44,45]編寫的 應用程序和一個用.net編寫的應用程序可以通過WebServices實現數據信息的交 互[46]。 Web Services 是基于一些如 XML、 HTTP 等標記語言的一門技術,由于這 些語言都比較通用,使得它在部署時顯得也非常方便。
    當一個公司的新舊業務之間使用不同的平臺或語言描述,或是不同公司的應 用間需要進行數據信息交互時,Web Services是一項非常好的技術。比如說360 導航、好 123、 Google265 等網站都會有天氣預報的信息,并且這些網站提供的 信息除了在表現形式上有所不同外,內容是相同的,這些網站其實就是調用氣象 局服務器暴露的一些接口實現信息的發布。各個門戶網站的財經欄目中的股票行 情信息也是同樣的道理。如圖 2-8 為購物網站與物流公司的一種信息的交互,它 們之間不再是簡單的用HTTP進行信息的交互,而是用WebServices實現,不僅 跨平臺,而且跨越了編程語言。購物網站不需要自己也保存物流信息,只需要調
    用物流公司服務器提供的接口即可。
     
     
    圖 2-8 Web Services 在不同公司間的應用
    Fig 2-8 Web Services application structure between different companies
    2.3.2Web Services 主要技術
    為了實現客戶端與服務器之間數據的正確傳輸,就需要建立一套統一的接口
    標準, Web Services 已經有一套完整的協議規范,如圖 2-9 所示:
    L
    F s
    W
    務 HR 服 安全 管理能力 服務質量
    現 發 務 HR 服
    布 發 務 HR 服
    L
    W 述現口 描實接 務務務 HR HR HR
    P
    S
    a e
    c
    s
    ML
    X 型 模 據 數
    示 顯 據 數
    輸 傳 據 數
     
    圖 2-9 Web Services 協議棧
    Fig 2-9 Web Services protocol stack
    從Web Services協議棧可以看出,WebServices基本技術主要包括為:
    l.XML(Extensible Markup Language)可擴展型標記語言是由W3C創建,它主 要是面向時間短的臨時數據處理,面向萬維網絡,是SOAP[47]的基礎。XML具 有良好的擴展性,和機構化特性,做到了內容和數據分開描述, XML 還有一個 最顯著的特點是,它擺脫了平臺和廠商的限制并且它克服了 HTML不能滿足Web Services 自動操作數據的需求。
    2.SOAP : (Simple Object Access Protocol) 簡單對象存取協議,是 SOA (Service-Oriented Architecture,面向服務架構)的實現協議[48]。包括:請求消 息和響應消息,它是依賴于WSDL文檔的定義。Web Services通過標準通信協議, 在互聯網上發布有用的程序模塊(以服務的方式),目前大部分是用 SOAP 作通 信協議。基于Web Service傳輸數據的服務器和客戶端,兩者之間的請求和相應 過程都都是通過SOAP消息進行的[49]。很多大公司比如微軟會根據自己的需求, 開發出一套符合自己的專有的方案,不過它們都是必須符合SOAP規范[50]。
    3.WSDL: (Web Services Description Language)是 Web Services 描述語言,充 當SOA的服務契約。它是一種接口定義語言,對應一種以“.wsdl”為后綴的文 件,一個 Web Service 對應一個唯一的 WSDL 文檔。該文檔定義了 Web Service 服務器和客戶端應用程序之間相互交傳遞請求和相應數據的格式和方法。 WSDL 也是基于XML的,這樣方便開發人員的操作,我們既可以通過人工的方式閱讀, 也可以借助計算機程序解析,加快了開發者的效率。不僅如此,我們還可以通過 軟件自動生成WSDL文檔。WSDL基本包括元素:
    Type:消息類型,定義數據類型(如string> int)。
    Message:消息,通信數據的抽象類型化定義。
    Part:消息參數
    Port Type :端口類型。
    Binding:特定端口類型和數據格式規范
    Port :定義為綁定和網絡地址組合的單個端點。
    Service :相關端口的集合。
    Operation:操作。
    WSDL 支持4 種消息交換方式:
    單向(One-way):服務端接收消息。
    請求響應(Request-response):端點接收并發送相應消息。
    要求應答(Solicit-response):端點發送并接受相應消息。
    通知(Notification):端點發送消息。
    4.UDDI(Universal Description, Discovery, and Integration) 是由 OASIS (Organization for the Advancement of Structured Information Standards )標準化組 織制定的一種基于XML和SOAP的協議。其中XML的作用主要是對數據進行 封裝,SOAP規范注冊信息。通俗的講,UDDI類似于手機通訊錄,手機通訊錄 中存儲的是每個人的手機號碼等信息,而在UDDI中存儲的是Web服務的信息。 UDDI目錄包括三個部分:白頁(White Paper)>黃頁(Yellow Paper)>綠頁(Green Paper)。
    Web Service 一般分為.Net版和Java版,我們主要用Java版的WebService實 現灌區信息管理系統服務器部分。
    第三章 系統的總體方案設計
    3.1 系統背景
    灌區信息管理系統主要是為灌區灌溉系統服務,所以有必要了解一下農田灌 溉系統的組成部分。用通俗的話講,灌區就是由水庫、渠、農田、作物組成的一 個結構體,灌區灌溉管理系統就是針對該結構體進行有效管理的組織,它是基于 某一流域的水資源管理機構,主要負責水資源的合理調配。主要采用的方法是市 場調節。目的是解決我國水資源短缺與灌溉效率低下的矛盾。灌區灌溉系統的組 織結構圖如圖 3-1 所示,整個系統的組織結構由上到下分別為:決策層、管理層 和操作層。
     
    圖 3-1 農田灌溉管理系統的組織結構圖
     
    Fig 3-1 Irrigation district organization chart
    灌區管理局屬于決策層,主要負責對所管轄范圍內的農田澆灌作業進行統一 的規劃和安排,其中包括:了解該地當年的氣候和天氣狀況,調查當地農作物的 種類和生長狀況以及土壤的水分信息等,合理計劃灌水量和灌水時間表,為農戶 的農業用水提供科學的意見。
    灌溉管理站屬于管理層,主要工作為:根據灌區管理局提出的安排和意見并
     
    結合農民的需求,進一步為農民的用水量提出意見,以及負責水費的征收,并將 信息通知現場灌溉配水操作人員,以及對灌溉配水操作人員進行統一的安排和管 理。
    灌溉操作人員主要是負責完成農田現場的配水操作過程,接受上一級的命令, 完成現場灌溉配水作業。
    實地調查人員,接受上層(灌區管理局)的安排,對農作物的種類和生長狀 況、土壤濕度以及澆灌的情況進行調查,并將調查所收集的數據反饋給灌區管理 局作為參考。
    3.2 需求分析
    3.2.1業務需求分析
    在整個灌區配水過程中,灌區管理局通過實地調查人員掌握農戶用水情況, 并制定澆灌作業計劃,最后灌區管理局將作業規劃下發到灌溉管理站。灌溉管理
    站接受上級(灌區管理局)的安排,根據實際需求將灌區進行劃分,并為每一個
     
    圖 3-2 灌區配水過程
    Fig 3-2 Irrigation water distribution process
    由上圖可知,用戶的農田澆灌用水可以通過兩種方式獲取:一種方式是直接 向灌溉管理站購水,用戶需要向灌溉管理站提交相關資料,包括個人信息、所有 人的農田信息以及個人用水申請等信息,灌溉管理站的工作人員根據用戶上交的 資料并結合上級灌區管理局的決策意見做出最終決定,決定是否批準購水申請并 完成水費征收等操作。用戶向配水操作員工出示繳費憑證,配水操作員工核實無 誤后完成配水工作。但是這一種方式比較繁瑣,用戶需要經過多個地方才能完成 配水澆灌工作。另一種方式是用戶直接向灌溉配水操作人員購水,灌溉配水操作 人員根據用戶的請求向上級(灌溉管理站)匯報情況,如果上級同意,進行現場 收費并完成配水工作,否則不予執行。但是這種方式的前提是灌溉管理站需要提 前掌握用戶的信息情況,所以該方式需要數據庫系統和軟件的支持。
    在上述的購水過程中,無論采用何種方式,都涉及到水票。水票的作用即是 作為用戶的購水憑證。在傳統的購水過程中,灌溉管理站需要開具三份購水憑證, 分別屬于購水人、灌溉管理站以及配水操作人員所有。購水人主要是通過水票向 配水操作人員證明自己已經繳納水費以及購水量等信息。灌溉管理站使用購水憑 證主要是用于留底和財務計算。配水操作人員使用購水憑證的主要目的是為了和 購水人的水票信息進行對比,從而證明購水人的水票信息是否屬實。在購水過程 中,該軟件系統要實現以下目的:
    當用戶采用方式一購水時,灌溉管理站為購水人提供紙質水票,并將相應的 購水記錄錄入服務器數據庫,一方面供灌溉管理站自身使用,另一方面供配水操 作人員使用移動終端 APP 驗證查詢使用。當用戶采用方式二購水時,水票由配 水操作人員提供,配水操作人員通過移動終端 APP 向購水人開具電子水票,同 時將購水信息記錄于服務區數據庫中,供灌溉管理站和配水操作人員自己查詢。 并且,當用戶在配水過程中發現水票余額不足時,可以在農田現場采用方式二直 接向配水操作人員完成續費。
    軟件需要實現的另一目的就是保證各方利益,即保證用戶、灌區及配水操作 人員三者之間的利益。在傳統的配水過程中,常常出現以下現象:
    當配水操作員工按照要求完成對農民的配水工作,有時會出現農民的抵賴現 象,導致在很長一段時間之后,配水操作員工無法拿出有效的證據來證明自己的 工作,導致配水操作員工的利益得不到保障。另一方面,配水操作員工為了自己 的利益,在配水過程中出現一些舞弊現象。比如說,配水操作員工根據自己的意 愿,隨意的調亂農民的配水順序,導致農民的利益得不到保證。或是,配水操作 員工為了自己的利益,為沒有繳納水費的農民進行配水,這時損害的是灌區灌溉 管理系統的利益。為了解決以上問題,軟件系統主要使用拍照功能,并且配水操 作員工不進行拍照時,不能進行配水工作,配水工作完成后,必須再次進行拍照。 此時,移動終端只能進行照片的一次性上傳,不能對已上傳的照片進行修改,這 樣做的目的是防止配水操作員工的舞弊行為,保護灌區和用戶的利益。
    3.2.2系統需求分析
    根據業務需求分析,灌區信息管理系統主要包括配水操作人員的 Android
    App 部分和服務器端提供信息的查詢系統,簡稱移動終端和服務器。
    1.移動終端
    移動終端主要是利用手機的無線網絡收發功能,實現配水操作人員隨時隨地 向服務器查詢系統提交和查詢相關信息,做到真正的移動化辦公。在移動終端實 現的功能主要包括:
    (1)查詢功能。查詢功能主要有用戶信息查詢(包括:用戶ID、用戶姓名、 性別、聯系方式、家庭住址、對應農田信息的編號、用水狀況記錄)、用戶購水 信息查詢(也可以叫做水票信息查詢,包括購水人姓名、購水時間、購水單價、 購水量、總價、預計放水開始時間、預計放水結束時間)、農田信息查詢、農田 土壤信息查詢(比如說土壤濕度信息)、渠道放水量信息查詢、灌區流量查詢、 降雨量信息查詢以及灌區水位信息等。
    (2)信息提交功能。信息提交功能主要為購水信息提交、現場審核和完成用戶 的用水申請、圖像采集、農田信息上傳(土壤信息、濕度、農作物信息)。其中 圖像采集的功能主要是用于解決配水過程中的糾紛,也是作為配水操作人員的工 作成果。為了保證數據的原始性和可信性,存放圖片的數據庫只支持移動終端對 其進行插入和查詢操作,不允許進行修改和刪除等操作。
    (3)用戶通知功能。該部分的功能主要是完成購水用戶的通知。
    (4)網絡設置。主要包括一些網絡參數設置。
    2.服務器
    服務器系統提供基于Web Services的數據查詢功能和數據庫信息的管理功能, 為移動終端的App提供接口,供App實現數據的交互。最終做到響應移動終端
    的信息查詢、接收移動終端提交的信息、數據庫的設計。
    (1)響應移動終端的信息查詢。該部分必須與移動終端的查詢功能一一對應。
    (2)接收移動終端提交的信息。主要包括購水信息提交的處理,農田信息提交 的處理、
    (3)數據庫的設計。數據庫主要包括:工作人員信息表、農戶信息表、農戶購 水記錄表、水票信息表、農田信息表、渠道水位信息表、農田降水量信息表等。
    在滿足以上功能的基礎上,盡量遵循以下原則:
    在操作方面:盡可能做到操作簡單和業務流程的明朗。使每個操作人員剛剛 接觸該軟件時即能上手操作或是只需簡單的學習。
    在數據傳輸方面:在完成各項功能的前提下,盡量做到數據流量不要過大。
    日志信息,預防軟件在出錯的情況下查看。
    采用模式設計,盡量將一些常用和可能出現的方法抽象成接口或超類,方便 日后進行系統升級時,避免大量的修改代碼,做到高內聚低耦合的原則。
    移動終端要盡量做到簡單,一些邏輯判斷等操作功能盡量由 Web Service 部 分完成。最大化限度地減輕移動客戶端運行壓力,最終達到軟件的穩定運行。
    通過該信息管理系統盡量做到:方便配水操作人員查詢灌溉管理站的相關信 息,簡化用戶購水的過程。從而達到農業灌溉的信息化流程,提高工作效率。
    3.3 系統的部署
    在整個灌區信息管理系統中,服務器端的用戶管理模塊根據每個用戶(此處 的用戶是灌區工作人員)的級別分配相應的權限。例如:管理員擁有最高權限, 可以添加和刪除用戶,并為其他用戶設置權限級別。灌溉管理站人員根據上級(灌 區管理局)的決策安排,制定詳細的用水計劃,并在相應的權限內完成農戶用水 的申請以及審核來自配水操作人員在現場的購水工作。灌溉配水操作人員根據系 統分配的賬號進行權限之內的操作,比如說根據用戶提供的水票進行相應的驗證 和幫助用戶完成現場購水操作等。
    各個部門的工作人員之間的通信主要是依靠移動互聯網進行,這樣不僅提高 了農田灌溉的效率,還極大地方便了農民的用水過程。系統的整體部署結構如圖
     
     
    圖 3-3 系統結構框圖
    Fig 3-3 System structure diagram
    農戶不僅可以從灌溉管理站查詢農田的用水情況和農田配水計劃。農戶也可 以根據自己的實際情況和專家的指導意見決定預計配水時間和配水量的大小。農 戶的購水申請也可以通過配水操作人員的移動終端完成。配水操作人員也可以通 過移動終端在線驗證農戶提供的交費證明。
    3.4 系統的總體架構
    3.4.1各架構的對比
    目前流行的應用系統架構主要有C/S和B/S兩種[51]。
    1. C/S
    C/S 即客戶機和服務器架構。該架構通常采用高性能的 PC 做服務器,并采 用大型數據庫,并且需要制定專門的客戶端軟件[52]。客戶端軟件需要完成大部 分業務邏輯判斷和UI界面。C/S的架構圖如圖3-4所示。
     
    圖 3-4 C/S 架構圖
    Fig 3-4 C/S architecture diagram
     
    C/S 架構的優點是:響應速度快,因為該方式將大部分邏輯業務由客戶端完 成,較好地利用了客戶機的硬件性能;安全性容易保證;界面操作豐富;通信開 銷小。
    C/S 架構的缺點是:開發成本高;維護成本高。只要客戶端的專用軟件出現 異常時,就需要專門對其進行重新安裝或修復,尤其是一些復雜的軟件還需要專 業人員去安裝。另外,一旦對系統進行升級時,就會涉及到所有終端軟件的升級, 這時消耗的人力、物力也是非常大;用戶群固定。只有在PC機上安裝相應客戶
    端軟件的用戶才能享受其服務,無法面對其它未知客戶。
    2. B/S
    B/S又稱Brower/Server模式。客戶機上只要安裝一個瀏覽器(Browser),如 Netscape Navigator 或 Internet Explorer,服務器安裝 Oracle、Sybase> Informix 或 SQL Server等數據庫。瀏覽器通過Web Server同數據庫進行數據交互。服務器 完成大部分的業務邏輯事務,減輕了客戶端的壓力oB/S架構層次如圖3-5所示。
     
    圖 3-5 B/S 架構圖
    Fig 3-5 B/S architecture diagram
     
    由圖可知,服務器端不僅在業務邏輯方面添加了壓力,還需要有Web引擎與 客戶端的瀏覽器配合。
    B/S 架構的優點是:大量的業務邏輯事務放在了服務器,對用戶計算機性能 和配置的要求不高;適合工業化大規模生產的要求,因為用戶電腦上只要安裝有 任何品牌的瀏覽器即可完成網站的瀏覽;無需升級多個客戶端,只需要升級服務 器即可。
    B/S 架構的缺點是:過于標準化的 B/S 前端,同樣可以理解成為過于呆板, 這直接導致了 B/S模式下的功能實現沒有C/S靈活、方便、美觀。雖然諸如Ajax 等技術已經在這方面做了很好的改進[53],但是依然無法達到像3D網絡游戲等給 用戶帶來的視覺享受;在跨瀏覽器上表現不佳;在速度和安全性上需要花費巨大 的設計成本;客戶端服務器端的交互是請求-響應模式,通常需要用戶專門去刷
    新頁面(在Ajax之后,此問題得到一定程度的緩解[54])。
    3.4.2本文選擇的系統架構
    根據以上對比分析,本文采用的是B/S架構基礎上靈活采用C/S架構。為了 減少服務器與移動終端通信傳輸所使用的流量,本系統的移動終端不采用傳統的 瀏覽器方式。移動終端的數據以APP的形式展現,故移動終端APP負責對數據 進行修飾和封裝。這樣做的好處是,終端用戶可以使用自己習慣的數據表現方式。 軟件客戶端通過Web Service接口完成數據的更新和傳輸[55],并且不受終端的軟 件開發語言的限制(本文的客戶端主要是基于Android開發的)。采用支持Android 系統的手機作為移動終端的設備,在Web服務器端提供移動終端APP的調用接 口。系統架構如圖3-6所示,其中Web服務器端采用了 MySql數據庫。數據庫 主要存放用戶信息、農田信息、用戶購水信息、用戶管理等。Android移動終端 和Web服務器端的通信是基于Soap+Http的Web Services技術。Android移動終 端主要是完成用戶信息查詢、農田信息查詢、用戶購水的申請、用水記錄登記、 圖像采集等。其具體實現過程將在后面的章節中作詳細的說明。
     
    圖 3-6 系統架構圖
     
    Fig 3-6 System architecture diagram
    第四章 移動終端的設計與實現
    4.1 移動終端功能模塊
    根據需求分析,灌區信息管理系統的移動終端部分,實現的主要功能可以用
    圖 4-1 表示:
     
    圖 4-1 移動終端的模塊圖
     
    Fig 4-1 The function model of mobile terminal
    由上圖可知,移動終端主要實現的功能如下:
    1.水票驗證:驗證的信息主要包括水票id號、購水用戶、用戶對應的農田渠 道號、購水時間、購水量、單價、總價、預計放水開始時間、預計放水結束時間、 水票對應的配水狀態。
    2.查詢數據:移動終端的查詢功能主要包括:查詢用戶信息、查詢農田及用 水信息、查詢本地區降雨量信息、查詢天氣信息、查詢農田土壤水分等信息。
    3.申請購水:灌溉配水人員利用移動終端手機,可以實時為用戶申請購水, 并向服務器提交購水信息,灌溉管理站審核該配水人員提交的購水信息,并決定 通過與否。如果通過,則表示購水成功,否則,表示購水失敗。其中提交購水申 請時,移動終端需要提交的信息包括:用戶信息,農田所屬的渠道號和其它農田 基本信息,用水量,預計放水開始時間,預計放水結束時間。
    4.圖像采集:圖像采集的作用主要是證明農田配水前后的狀況及對比,如果 將來用戶對配水情況有疑問時,可以作為證據保存。采用此功能,移動終端可以 隨時將采集到的圖像信息上傳到服務器,以便服務器端的工作人員查詢。
    5.短信收發:短信收發主要用于通知農戶購水成功信息、通知農戶預計放水 開始時間、通知農戶交納水費等。
    6.通知用戶:該模塊主要是用于緊急情況下的農戶通知,比如說放水時間已 到,而農戶還沒有到達農田現場,或者是放水過程中出現意外情況,而農戶又不 在現場等。
    7.用戶管理:主要是用戶管理權限和用戶密碼的設置。注意:只有擁有一定 管理權限的用戶才可以為其他用戶更改用戶管理權限和登陸密碼,一般用戶只能 為自己修改登錄密碼。
    &網絡設置:網絡設置主要包括App登錄服務器的IP地址和端口號的設置。 主要是在用戶第一次登錄服務器時或者服務器IP地址、端口號發生變動的情況 下使用。
    9.歷史數據:該模塊首先記錄移動終端的每一項操作,比如購水申請、水票 驗證以及用戶通知等,以流水號的形式,按時間依次記錄。其次用戶可以進行相 關方面的查詢,也可以對一些無用的數據進行刪除,也可以設置一個時間點,自 動刪除某一時間點以前的所有歷史數據,以免造成移動終端因存儲空間不足而造 成程序無法正常工作。
    4.2 移動終端的操作流程
    4.2.1主程序的操作流程
    移動終端的操作流程的還是很簡單的,用戶啟動灌區信息管理系統后,首先 系統需要判斷是否已經完成網絡設置,如果用戶還沒有完成網絡設置,或者設置 的網絡參數已經不能登錄當前服務器,則需要進行網絡設置,否者頁面進入不了 登陸頁面。如果已經完成網絡設置,并且通過服務器的驗證,則直接進入登錄界 面。進入登錄界面,用戶需要輸入服務器分配給個人的用戶名和密碼,并通過服 務器端驗證才能進入系統的主界面。進入主界面后方可進行權限內的各項操作。 該處,用戶無法自行注冊用戶名,只能用服務器分配給用戶的用戶名與密碼,用 戶登陸以后,可以對用戶的密碼進行修改,或是進行用戶權限范圍內的相關操作。 系統的主操作流程如圖 4-2 所示:
     
    圖 4-2 移動終端 App 的操作流程
     
    Fig 4-2 The operation of the mobile terminal App process
    4.2.2水票驗證的操作流程
    水票驗證是配水操作人員利用移動終端進行的一項主要操作,用戶從主界面 選擇“水票驗證”按鈕進入水票驗證界面時,首先需要驗證該登陸用戶是否具有 水票驗證權限,如果該登錄用戶沒有水票驗證的權限,則彈出警示框提示“您沒 有權限進行此項功能”,程序并終止進入水票驗證的界面,返回系統主界面。如 果該登陸用戶具有驗證水票的權限,則進入水票驗證的界面。查詢水票時,需要 輸入水票ID號和相關驗證信息(本文選擇驗證信息是水票對應的購水農戶的姓 名)。如果輸入的ID號和對應的驗證信息不正確,則查詢失敗,移動終端顯示“您 輸入的ID號不存在或則ID號和驗證信息不匹配”,界面返回輸入ID號和對應 驗證信息的界面。如果輸入的ID號和對應的驗證信息正確,則可以查詢水票相 關信息。水票驗證的操作流程如圖 4-3 所示:
     
    圖 4-3 水票驗證流程圖
     
    Fig 4-3 The operation process of water tickets authentication
    36
    4.2.3申請購水的操作流程
    在農田現場幫助農戶完成申請購水是配水操作人員利用移動終端進行的另 一項主要的操作,也是本系統的主要特色。用戶從主界面點擊“申請購水”的按 鈕進入申請購水界面時,首先服務器需要驗證該登陸用戶是否具有申請購水的權 限,如果該登錄用戶沒有申請購水的權限,則彈出警示框提示“您沒有權限進行 此項功能”,程序終止進入申請購水的界面,返回系統主界面。如果用戶具有申 請購水的權限,則進入申請購水的界面。用戶購水時,需要詳細填寫購水相關信 息,比如說購水人姓名、農田所屬的渠道號、農田土壤水分、農作物信息、用水 量、預計放水開始時間、預計放水結束時間。申請購水的操作流程如圖4-4 所示:
     
    圖 4-4 申請購水流程圖
     
    Fig 4-4The process of application for water
    4.3移動終端軟件的結構
    在灌區信息管理系統中,本文將各種類型的類都放在相應的包結構之下,一 方面防止類的重復命名,另一方面也可以很清晰地了解整個項目的框架[56], Android 中的包結構如圖 4-5 所示。
    “信 IrrigationlnformationSystemC
    J 鍔 src
    0 corn.exarnple.irrigationinforrnationsystemc
    0 田匸om.example.irrigationinformationsystemc.dao
    0 田 corn.exarnple.irrigationinforrnationsystemc.rnodel
    0,扭 com.example.irrigationinformationsystemc.util5
    0 遜 gen [Generated」ava Files]
    Android Private Libraries
    assets
    bin
    libs
    res
    An droid M a nife st>::m I
    團 ic_l自uncher-web.png
    Ul p ro g u a rd - p roj e ct.t:-:t
    [B| p roj e ct.p ro p e rti e 5
    圖 4-5 Android 中的包結構
    Fig 4-5 The application of MVC in Android
    irrigationinformationsystem 包的主要是一些控制類,它包含了項目中的所有 Activity。
    irrigationinformationsystem.dao 數據持久層,主要負責數據的存儲訪問。
    irrigationinformationsystem.model 絕大多數的業務類放在該包下。
    irrigationinformationsystem.utils 是個工具包。
    另外 res 文件夾主要存放一些視圖控制類的文件。由圖 4-6 可知,在 Layout
    文件下,每一個.xml文件都對應著一個activity。
    fl ctivii?r'_m a i n ^-::rn I s re a_ra i nfs II .::■:: rn I b uy_wate r>::rn I ch n & l_fl o Vu->::rri I ch a n e l_i nf o ■>::rn I ch a n e l_war_l eve I ■>::廣廠11 ch e ck_ti cket_i n p ut^-::rn I ch e ck_ti cket^:-::rn I fa rrn I s n d_i nfo .::■:: rn I his tc> n/_d ata ■>::廣廠i 丨 info rrri_u s e r>::m I login ^:-::rn I logo ut>:<rn I n et_par_s st^-::rn I q ue nr'_d ata >::rn I te::-:±_u s e r>::rn I ti ck et_i nfo >::rn I use r_i nfo ^-::m I use r_rn gt^:-::rn I we I >::m I
    圖 4-6 Loyout 文件下的結構
    Fig 4-6 The corresponding relation of View and Controller in Android
    4.4 移動終端的實現
    4.4.1開發環境的配置
    4.4.1.1 軟件需求
    Android 開發環境相關的軟件包括:操作系統的類別和開發工具。
    操作系統:基于Android的開發對開發平臺的操作系統沒有特殊的要求,無 需特定的操作系統。支持開發Android應用程序的操作系統的版本有很多,包括 Windows XP、 Windows Vista、 Windows 7。
    Java Development Kit (JDK):在這里必須正確的安裝JDK,不能簡單的只 安裝JREo其實JRE包含于JDK中。其中JDK的版本要求是JDK 5或JDK6或 者是更高級別的版本。
    Eclipse: Eclipse 是一款由 IBM 開發的開發平臺軟件,該軟件功能特別的強,
    最后 IBM 又將其捐贈供世界各地的開發人員使用[57]。經過全世界各地的開發人
    員的大力配合,Eclipse已經有了多種程序語言的版本,包括:Java、C/C++、PHP、
    Software modeling、 Ruby, Python、 telnet 等等。只要開發出相應的插件,理論
    上是沒有語言限制的。不過程序寫出來以后,要有相應的語言環境支持。在這里, 我們需要的版本是 “Eclipse IDE for Java Developer, version:4.2.0"。它由 Eclipse Project、Eclipse Tools Project、Eclipse Technical Project 和 Eclipse web 工具平臺項 目等組成,為Java開發人員提供了一個自由、多平臺的開發環境。廣大Java開 發人員認為 Eclipse 與 Java 語言配合得天衣無縫。
    Android Development Tools(ADT)plugin for Eclipse:ADT 是 Android 在 Eclipse 上的開發工具。在 Eclipse 編譯 IDE 環境中安裝 ADT, 為 Android 開發提 供開發工具的升級或者變更。它作為Eclipse的一個插件,必須與Eclipse 一起運 行。
    Android Software Development Kit(Android SDK) :Android SDK 可以理解為 Android 專屬的軟件開發工具包,包含許多 Android 程序開發資源,比如:鏈接 庫、程序除錯工具、AVD (手機模擬器)等。
    4.4.1.2 開發工具的安裝步驟:
    1.安裝 JDK
    JDK是Java的必備工具,一般編寫過Java程序的計算機都已經安裝好了 JDK。 如果不確定計算機中已經安裝的JDK版本,可以通過執行Windows的“控制面 板—■添加或刪除程序",找找看是否有一項叫做Java SE Development Kit (以前 的JDK版本名稱叫做Java 2 SDK,SE)的選項。如果通過這一步驟能找到,說 明該已經在該計算機上安裝好了 JDK(不過版本必須是JDK5、JDK6或者以上), 這樣就可以直接進入下一個步驟。如果通過這一步驟找不到JDK或JDK的版本 比JDK5或JDK6低,就需要先將就以前的JDK版本先刪除掉,然后按以下方法 安裝新的JDK。該方法如下:
    首先,通過啟動瀏覽器,在瀏覽器地址欄處輸入以下地址,或是利用百度搜 索 JDK 再從百度網頁上選擇以下地址:
    http://www.oracle.com/technetwork/java/javase/downloads/index.html
    通過該地址會從瀏覽器上看到如圖4-7的網頁,并點擊Download JDK按鈕 進入下一個頁面,從頁面中找到如圖4-8的表格(Platform),選擇合適本機操作 系統的版本(本文選擇的是Windows x64),接著在單選框中點擊“Accept License Agreement”,該選項必須選擇否則無法下載。接著進入下載頁面框,選擇好下載 路徑并開始下載。然后將下載好的文件進行安裝。
     
     
    圖 4-7 Java 官網下載 JDK
    Fig 4-7 Java's official website to download the JDK
    Product i File Description File Size
    1_35.24 MB ± jdk-8u31-linux-i586.rprT)
    154.91MB ± jdk-8u31-linux-i586.tar.gz
    135.62 MB 至 jdk-8u31-linux-x64.rpm
    153.45 MB ± jdk-8u31-linux-x64.tar.gz
    209.17 MB ± jdk-8u31-macosx-x64.dmg
    136.91MB * jdk-8u31-solaris-sparcv9.tar.Z
    97.11 MB £ jdk-8u31-solaris-sparcv9.tar.gz
    137.51 MB S jdk-8u31-S0laris-x64.tar.Z
    94.82 MB 至 jdk-8u31-solaris-x64.tar.gz
    157.96 MB _ ± jdk-8u31-windows-i586.exe
    170.36 MB S jdk-8u31-windows-x64.exe
    圖 4-8 選擇需要的 JDK
    Fig 4-8 choice requires JDK
    2.安裝 Eclipse
    除前面介紹的以外, Eclipse 還有一個最大的優點就是免安裝,只需要將已 下載好的文件解壓縮到指定的路徑即可o Eclipse不會自己更改計算機上的設置, 也不會在卸載后殘留任何垃圾,這就是大家常說的綠色軟件。在瀏覽器中輸入 Eclipse官網地址:http://www.eclipse.org/或是利用百度搜索Eclipse再從百度網頁 上選擇該地址。在Eclipse官網首頁直接點擊“Download”按鈕進入下載頁面,出 現類似于圖4-8的表格,選擇需要的版本,本文中選擇“Eclipse IDE for Java Developers”。然后點擊進入選擇合適本機操作系統的版本,在頁面中找到如圖 4-9的列表(Download Links),本文選擇的是Windows x64的版本。
     
     
    Down load Links
    Windows 32-bit
    Windows 64-bit
    Mac OS X (Cocoa) 32-bit
    Mac OS X (Cocoa) 64-bit
    Linux 32-bit
    Linux 64-bit
    圖 4-9 選擇需要 Eclipse 版本
    Fig 4-9 choice requires Eclipse version
    下載完畢后,建立一個新的文件夾,本文在D盤建立一個Eclipse的文件夾 (注意:建立文件夾時,文件夾的名稱和文件夾的路徑最好不要出現中文字符, 否則在程序執行過程中可能會出現不必要的錯誤),將已經下載好的壓縮文件全 部解壓到該文件夾中。此時已經完成對Eclipse的安裝。點擊eclipse.exe即可啟 動Eclipseo也可以在桌面上生成eclipse.exe的快捷鍵,避免下次啟動Eclipse時, 經過繁瑣的步驟到該文件夾下尋找 eclipse.exe。
    3. 安裝 Android Development Tools ( ADT)plugin for Eclipse
    打開 Eclipse,下載并安裝 Android Development Tools(ADT)plugin for Eclipseo 打開Eclipse后,依次點擊Help—Install new Software,出現如圖4-10的畫面,點 擊“Add”按鈕,在添加新軟件的界面中輸入以下信息:
    Name: Android Plugin
    Location: http://dl-ssl.google.com/android/eclipse/
    這樣既完成了 ADT plugin for Eclipse 的安裝。
    寸 CS | J<IV« I DC
    |typ« filter text
    Version
    衣擊這個按 鈕,并輸吳 Android笄發 工具的地址
    [ Select All 二][Deselect All ]
    |7I Group items by category
    I' I Shaw only software Applicdble to t«rg«t ■nvironmant
    (?) Contact aII update sites during instAll to find required softwflro
    Whot is already icstoMed?
    圖 4-10 安裝 ADT plugin for Eclipse
    Fig 4-10 install the ADT plugin for Eclipse
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
    4.安裝 Android Software Development Kit(Android SDK)
    通過啟動瀏覽器,在瀏覽器地址欄處輸入以下地址,或是利用百度搜索
    Android SDK再從百度網頁上選擇以下地址(也可以通過其他方式):
    http://developer.android.com/sdk/index.html ( 該 網 站 時 常 會 出 現 打 不 開 現 象 , Android developer 最新國內鏡像:http://wear.techbrood.com/也包含 Android 最新文檔 以及Android Wear, Android TV,Android Auto各個子領域方面的內容。)
    通過該地址進入 Android SDK 官網,并找到如圖 4-11 的表格。從該表格可 以看出, Android 官方網 站推薦 Windows 操作系統選擇 installer_r23.0.2- windows.exeo因此在本文中,我們選擇官方推薦的鏈接進行下載,并打開之前 在D盤建立的Eclipse文件夾,將下載好的文件解壓縮到該文件夾中。通過以上 步驟,Android SDK會自動生成一個android-sdk的文件夾。在android-sdk下找 到SDK Manager.exe并點擊出現如圖4-12的對話框,包括各種版本的SDK (SDK Platform And X.X APLX)、程序中的例子(Samples for SDK)、Android SDK 的資 源文件(Sources for Android SDK)、Android SDK 的文檔(Documentation for Android SDK)以及 Google 提供的其它 API (Google APIs by Google Inc)等。為 了方便起見,可以將其全部下載安裝好。
    I Platform 1 Package 1 S'ze MD5 Checksum
    Windows
    32 & 64-
    bit an droid-sdk_r23.0.2-wi ndows.zip 141435413
    bytes 89f0576abf3f362a700767bdc2735c8a
    installer_r23.0.2-windows.exe
    (Recom mended) 93015376 bytes 7be4b9c230341 el fb57c0f84a8df3994
    MacOS XJ bit / an droid-sdk r23.0.2-ma cosx.zip 90996733 bytes 322787b0e6G629d926c28690c79ac0d8
    Linu/
    32^f64- an droid-sdk_r23.0.2-li nux.tgz 140827643
    bytes 94a8c62086a7398cc0e73el c8e65f71 e
    首方推薦的Windows安裝程序
    Except as noted, th is content is licensed under Creative Commons Attribution 2.5. For details and restrictions, seethe Content License. About Android | Legal | Support
     
    圖 4-11 Android SDK 的官網
    Fig 4-11 Android SDK's website
     
    圖 4-12 Android SDK Manager
     
    Fig 4-12 Android SDK Manager
    安裝好Android SDK Manager,還需要在Eclipse中設置路徑。具體步驟是: 先打開Eclipse,依次選擇Window—Preferences,在對話框中選擇Android并將 android-sdk 的路徑填寫在 SDK Location 中。
    5.建立 Android Virtual Device( AVD)
    在編寫 Android 程序時,我們可以通過 AVD 手機模擬器來顯示當前程序的 運行效果。它包含于Android SDK中。建立AVD步驟是:在Eclipse中依次點擊 Window—Android Virtual Device Manager,屏幕會出現 AVD 管理器的對話框, 點擊“New”新建一個手機模擬器,依次填寫AVD的名稱(Name:MyAndroid)> 分辨率( Device:4.7”WXGA 1280*720: xhdpi)、 Android 版本( Target: Android 4.4.2-API Level 19)、鍵盤(KeyBord: hardware keyboard present)> 皮膚(Skin: Display a skin with hardware controls) 前置攝像頭(Front Camera: None)、后置 攝像頭(Back Camera: Emulated)> 內存(Memory Options: RAM=512M, VM Heap=64 )、內置存儲卡(Internal Storage : 200MiB )、外置存儲卡(SD Card:Size=200MiB)。
    通過以上步驟,Android的開發工具就已經安裝好了。如果要建立其它的AVD, 與步驟 5 的過程一致,只不過是在參數設置上有所區別。
    6.測試配置
    (1)新建 Android Application Project 項目
    ⑵在activity_main.xml中添加TextView并設置屬性參數,設置如下
    <TextView
    android:id="@+id/myTestView" android:layout_width="fill_parent" android:layout_height="wrap_content" android:textSize="40sp"
    />
    ⑶建立MainActivity類并繼承Activity類,在該類中復寫onCreate()方法
    @Override
    protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main);
    TextView myTestView = (TextView) findViewById(R.id.myTestView); myTestView.setText("測試配置成功!");
    }
    程序寫好后,在工具欄中選擇Android Virtual Manager—選中“MyAndroid” —Start—Launch,啟動之前已經建立好的AVD手機模擬器。然后選中建好的程 序右擊選擇 Run as—Android Application—Choose a running Android device(AVD Name: MyAndroid),如果屏幕出現如圖4-13的畫面,說明Android開發工具已 經配置成功。
     
    l(l Irrigationinformationsystem 汝 U 10:50 0 0 0
    測試配置成功!
    圖 4-13 Android 開發工具測試
    Fig 4-13 the Android development tools test
    7. 打包發布
    只要之前通過 Run As Android Application 測試過已寫好的程序,我們可以到 在Eclipse左邊的工作目錄的bin文件夾下就能找到與項目同名的apk文件。或 是可以使用以下方法:
    (1)選中項目,右鍵菜單—Andoid Tools—Export Unsigned Application Package, 直接保存就行,這是未簽名的。
    (2)選中項目,右鍵菜單—Andoid Tools—Export Signed Application Package, 后面一步步的去做,這是簽名的。
    APK 簽名用處主要有兩種:
    作用一:使用特殊的key簽名可以獲取到一些不同的權限。
    作用二:使用 key 簽名可以保證軟件升級時的一致性,同時也可以防止被一 些惡意軟件覆蓋。
    本文中,在程序中途需要真機測試時,我們使用前一種方法發布,到最后最 終程序完成時,使用后一種方法發布。
    4.4.2調用 Web Service
    在灌區信息管理系統的中,Android調用Web Services服務器端的接口還是 很簡單的。首先,我們需要導入類庫:ksoap-android類庫。由于移動終端的應用 軟件要調用Web Service暴露出來的接口,但是標準的Android SDK并不包含相 關的類庫,這時我們必須借助第三方的類庫(ksoap-android類庫)來幫助我們完 成在Android手機中獲取服務器端Web Service調用。有了這個類庫,調用Web Service就很方便了。由于我們選擇的是KSOAP2引擎技術,所以在本文中選擇 的 ksoap-android 類庫是 ksoap2-android-assembly-2.4-jar-with-dependencies。我們 可以通過登陸鏈接http://code.google.eom/p/ksoap2-android/直接下載。下載完畢后, 將該jar包導入相應的工程內即可對其調用。
    我們可以按照下面步驟完成對Web Service的調用:
    1.創建 HttpTransportSE 對象,該對象用于調用 WebService 操作
    HttpTransportSE ht = new HttpTransportSE(SERVICE_URL);
    2.創建 SoapSerializationEnvelope 對象。
    使用 soap1.1 協議創建 Envelop 對象
    SoapSerializationEnvelope envelope =
    new SoapSerializationEnvelope(SoapEnvelope.VER11);
    3.創建SoapObject對象,將 Web Service的命名空間(NAMESPACE)和方 法名(mathodName)以參數的形式傳入。
    實例化 SoapObject 對象
    SoapObject object = new SoapObject(SERVICE_NAMESPACE, mathodName);
    4.客戶端與服務器進行通信時,添加數據參數需要調用 addProperty(String name, Object value)方法,name表示參數名。需要注意的是:參數名對應的不是 Web Service方法中的參數名,而是要對應xml文件中設置的參數名;通常情況 下,工具會按順序依次生成“argO”、“argl”、“arg2”……,當然我們調用時也要按 參數的順序將name屬性依次填寫。
    object.addProperty("arg0", 1);
    5.調用 SoapSerializationEnvelope 的 setOutputSoapObject()方法,將 SoapObject 對象設置為 SoapSerializationEnvelope 對象的傳出消息
    envelope.bodyOut = object;
    6.調用 webService時,需要調用 HttpTransportSE對象的方法call(),將 SoapSerializationEnvelope 對象作為參數。
    ht.call(null, envelope);
    7.解析Web服務器返回的對象。
    由于軟件每次調用Web Service的接口,都需要調用該過程,可以將此過程 抽象到一個方法類中,放在 irrigationinformationsystem.utils 的工具包下。這樣每 次與Web Service通信時,只需要調用該類中的方法即可。
    4.4.3主要模塊和方法
    1.連接服務器模塊
    Android 移動終端的各項操作幾乎都要與 Web 服務器端進行通信,因此掉用 Web服務器端暴露的接口是一個很頻繁的動作,所以將調用Web Service的過程 設計成一個方法,并將其包裝在 ConnectUtil 類中。這樣不僅可以減少大量重復 的代碼,而且對代碼的優化也有很大地幫助,ConnectUtil類的代碼如下: package IrrigationInformationSystemC.utils;
    import org.ksoap2.SoapEnvelope;
    import org.ksoap2.serialization.SoapObject;
    import org.ksoap2.serialization.SoapSerializationEnvelope;
    import org.ksoap2.transport.HttpTransportSE;
    public class ConnectUtil {
    private static String NAMESPACE ;
    private static String SERVICEURL ;
    private static String METHOD_NAME ;
    public static SoapObject soapObject;
    private SoapObject request ;
    private static ConnectUtil instance = new ConnectUtil();
    //私有的構造 (構造器,構造函數,構造方法)
    private ConnectUtil(){}
    //公開,靜態的工廠方法
    public static ConnectUtil getInstance() {
    return instance;
    }
    public void setNAMESPACE(String namespace){
    NAMESPACE = namespace;
    }
    public void setSERVICEURL(String serviceurl){
    SERVICEURL = serviceurl;
    }
    public UserInfo getUserById(String methodName,int user_id) {
    METHOD_NAME = methodName;
    String user_id_str;〃農戶 id
    String user_name;// 農戶姓名
    String user_gender;// 農戶性另 U
    String user_tel;// 聯系方式
    String user_address;〃 農戶家庭地址
    String user_farmland_info;〃農戶對應的農田信息
    String user_water_info;// 對應用水信息
    if(NAMESPACE !=null && METHOD_NAME!=null){
    request = new SoapObject(NAMESPACE, METHOD_NAME);
    int myuser_id = user_id;
    if(myuser_id!=O){〃在java中,如果int沒有賦值,則默認問0 request.addProperty("arg0", user_id);
    }
    //生成調用WebService方法的SOAP請求信息,并指定SOAP的版本
    SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(
    SoapEnvelope.VER11);
    envelope.bodyOut = request;
    envelope.dotNet = false; //當前開發的是Java WS這里需要不調用.net WS
    HttpTransportSE ht = new HttpTransportSE(SERVICEURL);
    try {
    ht.call(null, envelope);
    if (envelope.getResponse() != null) {
    SoapObject result = (SoapObject) envelope.bodyIn;
    user_id_str = result.getProperty(0).toString();
    user_name = result.getProperty(1).toString();
    user_gender = result.getProperty(2).toString();
    user_tel = result.getProperty(3).toString();
    user_address = result.getProperty(4).toString();〃 農戶家庭地址 user_farmland_info = result.getProperty(5).toString();〃 對用農田信息 user_water_info = result.getProperty(6).toString();
    UserInfo userInfo = new UserInfo(user_id_str, user_name, user_gender, user_tel, user_address, user_farmland_info, user_water_info);
    return userInfo;
    }
    } catch (Exception e) { e.printStackTrace();
    }
    return null;
    }
    return null;
    }
    //ConnectUtil類中還有很多方法,比如說查詢所有用戶信息getUsers(),通過 id號查詢農田信息getFramlandById(),查詢所有農田信息getFramlandInfos(),驗 證水票等功能。由于方法有很多相似性,且代碼很多,在這里就不一一列舉,只 列出一個方法。
    }
    調用此方法時,還必須在 AndroidManifest.xml 中聲明該應用自身所擁有的權 限,具體做法為:<uses-permission android:name ="android.permission. INTERNET" />
    2.短信通知模塊
    由于農戶的手機終端沒有 App 或者農戶手機不是智能手機,無法安裝軟件, 在通知農戶預計配水開始時間和購水成功同時,需要調用短信功能,以做到實時 通知的效果。在Android系統中已經自帶短信功能,但是為了做到能被移動終端 App自動調用,并且短信的號碼和內容能根據應用要求自動填寫,需要制作一個 工具類,方便被各個功能和方法調用。短信通知模塊的代碼如下:
    package IrrigationInformationSystemC.utils;
    import android.content.Intent;
    import android.net.Uri;
    public class SendMessageUtil {
    private static String mynumber;
    private static String mymessage_body;
    //單例模式
    private static SendMessageUtil instance = new SendMessageUtil();
    //私有的構造 (構造器,構造函數,構造方法)
    private SendMessageUtil(){}
    //公開,靜態的工廠方法
    public static SendMessageUtil getInstance() {
    return instance;
    }
    public Intent sendMessage(String number,String message_body){
    mynumber = number;
    mymessage_body = message_body; if(mynumber!=null&&mymessage_body!=null){ Uri uri = Uri.parse("smsto:"+mynumber); Intent intent = new Intent(Intent.ACTION_SENDTO,uri); intent.putExtra("sms_body", mymessage_body); return intent;
    }
    else return null;
    }
    }
    3.電話通知模塊
    在緊急情況下,短信通知不能及時被農戶發現,需要調用電話通知模塊的功 能。電話功能和短信功能一樣,同樣屬于 Android 系統中自帶的功能。在這里, 我們主要是將電話功能制作成一個工具類。這樣我們每次調用時,只需要調用工 具類中的一個方法即可,不必寫大段的代碼。電話通知模塊的工具類的代碼如下: package IrrigationInformationSystemC.utils;
    import android.content.Intent;
    import android.net.Uri;
    publicclass DailUtil {
    privatestatic DailUtil instance = new DailUtil();
    privatestatic String mynumber;
    private DailUtil(){}
    //公開,靜態的工廠方法
    publicstatic DailUtil getInstance() {
    returninstance;
    }
    publicstatic Intent myDail(String number){
    mynumber = number;
    if(mynumber!=null){
    Uri uri = Uri. parse(mynumber);
    Intent intent = newIntent(Intent.ACTION_DIAL,uri); return intent;
    }
    else return null;
    }
    }
     
    第五章 服務器端的設計與實現
    5.1 服務器端的功能模塊
    根據需求分析,灌區信息管理系統的服務器端部分,主要實現的功能可以用 圖 5-1 表示:
     
    圖 5-1 服務器端功能模塊圖
     
    Fig 5-1 The function model of Web Service
    由上圖可知, Web Service 部分主要實現的功能如下:
    1.提供水票信息:對于直接在灌溉管理站購水的用戶,灌溉管理站工作人員 將用戶的購水信息錄入數據庫,并為用戶開具購水證明(水票)。Android移動終 端通過 Web Service 提供的接口,查詢驗證水票信息的真偽。
    2.提供查詢數據:服務器端提供移動終端可查詢的信息有:農田用戶信息, 用戶購水信息、農田及農田用水信息、土壤水分信息、渠道放水量及降雨量等信 息。
    3.響應購水申請:該部分主要是響應Android移動終端,配水人員在農田現 場幫助農戶完成的購水申請。在申請購水時,管理人員通過比較查看用戶及農田 信息和購水等相關信息,分析并決定是否同意用戶的購水申請或決定放水量的大 小、預計放水開始時間。
    4.接收上傳圖像:為了便于管理和保證數據存儲的安全,移動終端將現場所 采集的圖像信息上傳到服務器端,供其它有權限的終端用戶查詢,也可以供農田 用戶到灌溉管理站查詢,做到數據的共享。該功能也為配水操作人員的工作成果 提供證據,一方面供灌溉管局檢查灌溉配水人員的作業成果,另一方面預防農田 用戶在配水工作人員配水作業完成后的抵賴現象,進一步起到保護配水工作人員 的作用。
    5.管理用戶:服務器端的管理人員擁有用戶管理的最高權限,為Android移 動終端的用戶注冊賬號,設置初始密碼并賦予相應的用戶權限,比如說驗證水票、 查看用戶信息及申請購水等權限。Android移動終端的用戶只能在管理人員賦予 的權限內進行操作。當然,管理人員也可以對用戶進行注銷等操作。
    6.歷史數據:主要記錄Android移動終端用戶的查詢記錄和操作記錄,方便 以后管理人員的查看。
    5.2Web 服務的設計
    服務器端本文采用Tomcat + MySql的架構,結合SOAP、Web Services等技 術完成與 Android 移動終端的相互通信。由于 SOAP 是一種安全、簡單、與廠商 無關的消息機制,所以灌區信息管理系統采用基于 SOAP 的消息機制進行數據的 交互。
    Web Services的框架有很多種,目前,Web Services框架主要有Xfire、
    JAX-WS(Java API for XML-Web Services)、 REST(Representational State Transfer 表述性狀態轉移)。
    Xfire: 一種Java Web服務引擎,在Pojo和SOA之間充當連接的作用[58]。 相對于之前或同時代的 Web 引擎(如 Axis), Xfire 大大簡化了 Java 應用在 Web Service的搭建步驟。不過相對于后面出現的JAX-WS,其配置還是比較繁瑣, 目前基本上已經過時。
    JAX-WS: JAX-WS是Java 6中才有的,它是一種新的Web Service模式,基 于注解的方式配置Web Serviceo相對于Xfire,其配置過程已經變得非常簡單。 它同時兼容基于SOAP和REST的Web服務。
    REST:該方法用的比較少。
    基于上述分析,本文的灌區信息管理系統的Web Service部分采用JAX-WS 方式。
    5.3 數據庫的設計
    5.3.1數據庫框架的設計
    灌區信息管理系統的數據存儲需要數據的支持,所以數據庫的設計是 Web 服務器端的主要任務。在服務器端,程序與數據的連接采用 Hibernate 框架,使 用 Hibernate 使得程序的開發更加簡單,并且在我們將來更換數據庫時也不會對 程序的維護帶來很大的修改,只需要將配置文件做一些簡單的處理即可。
    Hibernate 的核心接口主要包括: Session、SessionFactory、Transaction、Query、 Criteria和Configuration,它們被用于大多數有關數據庫操作的軟件開發中。本 文中,采用Session接口完成系統中程序對數據庫的CRUD(Create,增加;Retrieve, 讀取;Update,更新;Delete,刪除)操作,所以Session接口是使用最頻繁的一 個接口。在數據庫查詢時,可以使用HQL語句或SQL語句兩種方式進行查詢。 在灌區信息管理系統采用Hibernate框架,主要出于以下原因:
    1.引入Hibernate,我們無需關注數據庫底層的操作,這樣可以將注意力全部 集中在業務邏輯層的設計,加大了程序的開發效率。
    2.分層更清晰,耦合性更小。
    3.通用性強,在保證程序不需要修改的前提下,只需要修改一下配置文件就 可以實現數據庫的更換。
    4.對象化。
    5.性能‘Hibernate會根據數據庫的類型和操作方法選取性能高效的SQL語句。
    6.增加了程序的魯棒性。
    Hibernate 開發方式主要有以下三種方式:
    方式一: Domain object -> mapping->db。 (官方推薦)
    方式二:先設計數據庫,然后使用工具自動生成mapping和Domain objecto 方式三:由映射文件開始。
    由于大部分編程人員習慣于在數據庫的基礎上進行程序的設計,所以方式二 被普遍使用。因此在本文中,也采用第二種設計方式。
    在使用 Hibernate 框架時,需要以下 jar 包:
    hibernate3.jar: Hibernate 的核心庫。
    odmg.jar: Hibernate 利用 odmg.jar 包實現了 ODMG 規范,也是 Hibernate 框 架的核心庫。
    cglib-asm.jar: CGLIB 庫。
    dom4j.jar 用來讀寫 XML 文件。
    commons-collections.jar: commons-collections.jar 主要包含 Apache 開發的集 合類。
    commons-beanutils.jar:同 commons-collections.jar 一樣,也是 Apache Commons 包中的一個,主要包含一些Bean工具類。
    commons-lang.jar:包含了一些數據類型的工具類,是java.lang.*的擴展。
    commons-logging.jar:日志功能。
    commons-collections-2.1.1.jar: Apache 的工具集。
    5.3.2數據庫表的設計
    Web服務器需要實現的相關功能包括:提供水票信息、提供查詢數據、響應 購水申請、接收上傳圖像以及管理用戶等,這些功能都需要在數據庫中作相應的 設計。根據需求分析,需要完成以下表的設計:灌區組織人員表、農戶信息表、 農戶購水信息表、農田信息表、水票表、農田用水信息表、渠道水位信息表、降 水量表、圖像管理表、灌溉配水人員購水記錄表等。
    下面重點對灌區組織人員表、農戶信息表、水票信息表、渠道水位信息表、 灌溉配水人員購水記錄表進行設計。
    灌區組織人員表users_staff:這里包括灌區管理局工作人員、灌溉管理站的 管理人員、灌溉配水操作人員以及系統管理人員,所有工作人員的分類是通過用 戶權限來區分(auth_id),包括工作編號、密碼、用戶權限、姓名、性別、聯系 方式、家庭住址、工作起始時間以及對個人的情況描述,如表5-1所示。
    表 5-1 users_staff 表
    Tab 5-1 users_staff table
    字段名稱 字段類型 是否為空 字段描述 備注
    users_staff_id INT UNSIGNED NOT NULL id號 PRIMARY KEY
    users_staff_pwd VARCHAR(30) NOT NULL 密碼
    auth_id INT UNSIGNED NOT NULL 用戶權限
    name VARCHAR(30) NOT NULL 姓名
    gender CHAR(1) NOT NULL 性別
    tel VARCHAR(25) NOT NULL 聯系方式
    add VARCHAR(50) NOT NULL 地址
    work_start time DATE NOT NULL 工作開始時間
    description VARCHAR(100) NULL 個人描述
     
    農戶信息表farmland_user:用來記錄農田用戶的相關信息,主要包括用戶編
    號、用戶姓名、性別、聯系方式、家庭住址、對應農田信息、用水狀況。如表
    5-2所示。
    表 5-2 farmland_user 表
    Tab 5-2 farmland_user table
    字段名稱 字段類型 是否為空 字段描述 備注
    farmland_user_id INT UNSIGNED NOT NULL id號 PRIMARY KEY
    name VARCHAR(30) NOT NULL 姓名
    gender CHAR(1) NOT NULL 性別
    tel VARCHAR(25) NOT NULL 聯系方式
    add VARCHAR(50) NULL 地址
    fram_id INT UNSIGNED NOT NULL 對應農田信息
    water status VARCHAR(100) NULL 用水信息
     
    水票信息表ticket:包括水票的所有信息,如:水票編號、購水人姓名、購
    水人編號、聯系電話、單價、總量、總計金額、對應農田id、農田信息、對應渠
    道號、預計放水開始時間、預計放水結束時間、配水狀態、購水日期。如表5-3 所示。
    表 5-3 Water_tickets 表
    Tab 5-3 Water_tickets table
    字段名稱 字段類型 是否為空 字段描述 備注
    ticket_id INT UNSIGNED NOT NULL id號 PRIMARY KEY
    owner_name VARCHAR(30) NOT NULL 購水人姓名
    owner_id INT UNSIGNED NOT NULL 購水人編號
    tel VARCHAR(25) NULL 聯系電話
    water_unitprice INT NOT NULL 單價
    water_totals INT NOT NULL 總量
    ticket_price INT NOT NULL 總計金額
    farmland_id INT UNSIGNED NOT NULL 農田id
    farmland_info VARCHAR(255) NULL 農田信息
    chn_id INT UNSIGNED NOT NULL 對應渠道號
    pre_begin_time DATETIME NOT NULL 預計放水開始時間
    pre_end_time DATETIME NOT NULL 預計放水結束時間
    status VARCHAR(10) NOT NULL 配水狀態
    purchase data DATETIME NOT NULL 購水日期
     
    渠道水位信息表water_lever_info:主要記錄灌區渠道的水位信息,包括記錄 編號、渠道號、水位、時間值。如表5-4所示。
    表 5-4 water_lever_info 表
    Tab 5-4 water_lever_info table
    字段名稱 字段類型 是否為空 字段描述 備注
    record_id INT UNSIGNED NOT NULL id號 PRIMARY KEY
    chn_id INT UNSIGNED NOT NULL 渠道號
    water_lever VARCHAR(10) NOT NULL 水位值
    time TIME NOT NULL 記錄時間
    配水人員購水記錄表buy_water_records:該表主要是供灌溉管理站的工作人 員進行查詢,查看移動終端的配水人員申請購水的記錄,方便灌區組織管理中財 務的計算。流水號、操作人員id、操作人員姓名、水票編號、購水農田id、相 關備注信息。如表5-5所示。
    表 5-5 buy_water_records 表
    Tab 5-5 buy_water_records table
    字段名稱 字段類型 是否為空 字段描述 備注
    purchase _id users staff id INT UNSIGNED
    INT UNSIGNED NOT NULL
    NOT NULL 流水號
    操作人員id PRIMARY KEY
    users_staff_name VARCHAR(30) NOT NULL 操作人員姓名
    ticket_id INT UNSIGNED NOT NULL 水票編號
    farmland_id INT UNSIGNED NOT NULL 購水農田 id
    description VARCHAR(100) NULL 備注
    5.4 服務器端的實現
    5.4.1軟件需求
    1.MyEclipse
    MyEclipse (MyEclipse Enterprise Workbench,簡稱 MyEclipse)是 Elipse 的 一個插件,其核心還是 Elipse。 Myeclipse 為 WEB 開發帶來了極大的方便。它能 把 JavaEE 以及連數據庫等方面的內容有效的整合起來。它通過一系列的插件實 現了 Servlet, AJAX, JSP, JSF, Struts, Spring, Hibernate, EJB3, JDBC 等多 項功能。
    MyEclipse 的官方網站為:http://www.genuitec.com/products/myeclipse (或者 http://www.myeclipsecn.com)
    2.Tomcat
    Tomcat 是由 Apache 主導開發的一款 WEB 服務器。相對于其它應用服務器 如: IBM 的 Websphere、 Caucho Technology 的 Resin、 Macromedia 的 JRun、 NEC WebOTX Application Server、 JBoss Application Server、 BEA 的 WebLogic 等,它 是一款免費、開源的并且性能也相當穩定的WEB服務器,受到了廣大Java開發 人員的青睞,并且許多軟件開發商也都使用 Tomcat。
    3.MySql
    數據庫(Database)是按照一定的數據結構方式和規律將數據有效的存儲起 來的一款軟件,它為用戶提供數據的存儲、查詢、修改以及刪除等一系列服務。 在信息化時代中,數據庫在科學研究和決策中扮演著重要的角色。數據庫系統實 現了數據安全控制和完整性控制。常用的數據庫軟件有:IBM的DB2、Oracle、 Informix、 Sybase、 SQL Server、 PostgreSQL、 MySQL 等。
    其中, MySQL 是當前非常流行的一款小型數據軟件。相對于其它大型數據 庫管(如 Oracle、 SYBASE、 INGRES、 PostgreSQL、 Visual FoxPro、 Informix、 DB2 等), MySQL 體積小、速度快,并且其具有的功能對于大多數軟件系統來 說已經應付自如,再加上開放源代碼的特性,使得MySQL深受世界各地軟件系 統開發者的歡迎。綜合比較,MySQL具有以下特性:
    •價格
    •速度
    •容易使用
    •可移植性
    •支持查詢語言
    •豐富的接口
    •安全性和連接性
    綜上所述,本課題將MySQL作為Web服務器端的數據庫軟件。
    4.連接數據庫的類庫
    mysql-connector-java-5.1.5-bin: JDBC 驅動是根據不同的數據庫來選擇,由于 本文中采用的數據庫是MySQL,所以需要java連接MySQL的驅動程序。
    5.Hibernate 相關的類庫
    開發 Hibernate 需要先獲得相關的類庫。 通常, 只需要 antlr-2.7.6、 commons-collections-3.1、 dom4j-1.6.1、 hibernate3 、 javassist-3.4.GA 、 jta-1.1 、 slf4j-api-1.5.10、slf4j-simple-1.5.10 這些類庫就可以了。
    5.4.2開發工具的安裝過程
    1.安裝 MyEclipse
    進入MyEclipse官方,選擇官方推薦的版本MyEclipse 2015 CI 11,下載并完 成安裝。與 Eclipse 不同的是, MyEclipse 是一個安裝文件,不過只要通過指示一 步一步地進行即可。接下來就是注冊碼的輸入,依次點擊windowfPreferencesr MyEclipse—SubscriptionfEnter Subscription,最后在相應的地方輸入用戶名和密 碼。這時,我們所需要的軟件就安裝好了。
    2.Tomcat 安裝與配置
    進入Tomca官方網站http://tomcat.apache.org/下載安裝包,并將其放在c盤 (其它路徑也可以,切記不能把服務器放在帶中文或帶空格的目錄下面)。由于 Tomcat是用Java寫的程序,所以需要java虛擬機的支持,我們還需要對環境變 量和端口進行設置。需要進行以下設置:
    (1)添加環境變量:變量名為 JAVA_HOME 變量值為 C:\Program Files\Java\ jdk1.9.0
    ⑵打開 PATH,添加變量值:%JAVA_HOME%\bin;%JAVA_HOME%\jre\bin
    (3)添加變量名: CLASSPATH=%JAVA_HOME %\lib\dt.jar;%JAVA_HOME%\ lib\tools.jar
    在Tomcat文件夾的bin目錄下點擊可執行文件startup.bat,當電腦顯示命令 行窗口后在瀏覽器地址欄中輸入:http://localhost:8080/,當出現帶有Apache Tomcat Logo圖片的頁面時,說明服務器已經安裝成功并順利開啟。如果出現“The CATALINA_HOME environment variable is not defined correctly” 的錯誤提示,則 說明CATALINA_HOME或是JAVA_HOME沒有配置好。需要重新配置。
    3.Tomcat 在 MyEclipse 下的配置
    打開 MyEclipse, window—Preferences—MyEclipse Enterprise Workbench— Servers—Tomcat—Tomcat 6.X
    (1)將 Tomcat server 選為 Enable
    (2)在 Tomcat home directory 處點 Browse...按鈕選擇 Tomcat6 的安裝路徑: C:\Tomcat6
    (3)打開 window—Preferences—MyEclipse Enterprise Workbench—Servers— Tomcat—Tomcat 6.X—JDK 樹形目錄,在 Tomcat JDK name 處點 add...按鈕,添 加第一步安裝的JDK,在彈出的窗口中點擊“Browse...”找到安裝路徑D:\Program Files\Java\jdk1.6.0_18,點擊 ok 返回。
    (4)打開 window—Preferences—MyEclipse Enterprise Workbench—Servers— Tomcat—Tomcat 6.X—Paths 樹形目錄,在右邊 Prepend to classpath 處點“Add JAR/ZIP”按鈕,添加 JAR 包“D:\Tomcat7\bin\tomcat-juli.jar”
    有時,當點擊MyEclipse的部署鍵,并不會出現相應的對話框。這時需要進 入 MyEclipse 的 workspace 目錄下, 找 到 并 刪 除 .metadata\.plugins\org. eclipse.core.runtime\.settings\com.genuitec.eclipse.ast.deploy.core.prefs 的文件即可 正常運行(這是很多Web開發人員也是本文中遇到的問題)。
    4.數據庫的安裝
    下載好MySQL的安裝包進行安裝時,會彈出寫有“ This application requires .NET Framework 4.0.Please install the .NET Framework then run this installer again."的警示框,意思是需要在安裝MySQL前先確保計算機上已經安 裝.NET Framework 4.0。有些網站將這種原因解釋為:高版本的MySQL中集成 了一些新的功能,這些新的功能需要用到.net frameworko解決以上問題就可以 正常安裝了,依然還要避免以下問題:在安裝路徑中中文字符、空格以及一些特 殊字符的問題,否則會安裝失敗;要記住安裝過程中數據庫監聽的端口的設置, 本文采用默認的3306端口; MySql的超級用戶密碼,該超級用戶十分關鍵,它 對數據庫具有絕對的權限,如果沒有該用戶名的密碼,我們將不能進行數據庫相 關方面的操作。
    5.4.3 Web Service 服務器的具體實現
    1.新建 Web Service Project 項目
    新建 Web Service Project 項目項目名稱為 IrrigationInformationSystemWS,具 體步驟為: 菜單欄 fFilefNewfWeb Service Project, Project Name: IrrigationInformationSystemWS, 在 WebService&J2EE Details 中的 FrameWork 選 擇 JAX-WS 方式。
    2.創建 Web Service 中的包及類庫,實現自己的業務
    雖然目前有很多關于用 Android 直接連接遠程數據庫的文章、博客,但是這 樣做的方法既不安全效率也不好。在本文中使用接口連接Web服務器,再通過 服務器的業務邏輯層完成對數據庫的操作。Web Service的服務器與客戶端的關 系如圖5-2所示,前者主要是處理后者的請求,執行業務邏輯,最終返回響應數據。 現在我們需要完成的主要是服務器中數據庫的設計,并完成業務邏輯層的設計, 最后將所需要的接口暴露出來,供客戶端使用。客戶端主要是完成發送請求,獲 取數據等操作。在Web Service系統中,只要Web服務器端提供接口,客戶端無 論是PHP應用還是.NET和Android應用,只要正確地調用Web服務器端的接口 即可。在本文中的客戶端方面,我主要是完成Android移動客戶端的編寫,該部 分已在第四章中重點描述。
     
    JSP ? 瀏覽器
    WebService
    Client PHP應用
    Servlet ?
     
    Service WebService
    ? C ? WebService .net應用
    Server Client
     
    Dao WebService Android 移動
    Client 客戶端應用
     
    WebService iOS移動客
    服務器端 Client 戶端應用
     
    客戶端
    圖 5-2 Web Service 服務器與客戶端的關系
     
    Fig 5-2 Web Service server and client relationship
    (1)domain 類的實現
    根據需求分析,灌區組織人員所要包含的信息如圖5-3所示,并且將該信息 包裝成一個domain類[59](其它對象如:農戶、水票、渠道等的實現與灌區組織 人員是非常類似的,為了節省篇幅,本文只對灌區組織人員的實現進行詳細的描 述)。
     
    Fig 5-3 Irrigation district organization personnel graph
    灌區組織人員(users_staff)的domain類為Users_staff,其主要代碼如下: package IrrigationInformationSystemWS.domain;
    import java.util.Date;
    public class Users_staff {
    private Integer users_staff_id;
    private String users_staff_pwd;
    private Integer auth_id;
    private String name;
    private String gender;
    private String tel;
    private String add;
    private Date work_start_time;
    private String description;
    public Users_staff(Integer users_staff_id, String users_staff_pwd,
    Integer auth_id, String name, String gender, String tel,
    String add, Date work_start_time, String description) { super();
    this.users_staff_id = users_staff_id;
    this.users_staff_pwd = users_staff_pwd;
    this.auth_id = auth_id;
    this.name = name;
    this.gender = gender;
    this.tel = tel;
    this.add = add;
    this.work_start_time = work_start_time; this.description = description;
    }
    public Integer getUsers_staff_id() {
    return users_staff_id;
    }
    public void setUsers_staff_id(Integer users_staff_id) { this.users_staff_id = users_staff_id;
    }
    //……其他 sets and gets 方法……
    }
    其它domain類對象的代碼與Users_staff類似,只是在變量上有所區別。需 要注意的是,domain類中所有的變量全部私有。
    (2)對象關系映射文件的實現
    Users_staff類的對象關系映射文件為Users_staff.hbm.xml,該文件用于配置 domain對象和表的映射關系。通常我們將其放在Users_staff所在包的domain文 件夾下,其配置如下:
    <?xml version="1.0" encoding="utf-8"?>
    <!--該文件要清楚地表述出類和表的對應關系-->
    <!DOCTYPE hibernate-mapping PUBLIC
    "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> <hibernate-mapping package="IrrigationInformationSystemWS.domain">
    <!-- name : 表示類名 table 表示該類和哪個表映射 -->
    <class name="Users_staff" table="users_staff">
    <!-- id 元素表示表的主鍵是,每一個表都應該有一個主鍵 --> <!-- name:表示類的哪個屬性是主鍵-->
    <id name="users_staff_id" type="java.lang.Integer"></id>
    <property name="users_staff_pwd" type="java.lang.String">
    <column name="users_staff_pwd" not-null="true"/> </property>
    <property name="auth_id" type="java.lang.Integer">
    <column name="auth_id" not-null="true"/> </property>
    <property name="name" type="java.util.String">
    <column name="name" not-null="true"/>
    </property>
    <property name="gender" type="java.util.String">
    <column name="gender" not-null="true"/>
    </property>
    <property name="tel" type="java.util.Date">
    <column name="tel" not-null="true"/>
    </property>
    <property name="add" type="java.util.String">
    <column name="add" not-null="true"/>
    </property>
    <property name="work_start_time" type="java.util.Date">
    <column name="work_start_time" not-null="true"/>
    </property>
    <property name="description" type="java.util.String">
    <column name="description" not-null="false"/>
    </property>
    </class>
    其它 domain 對象的關系映射文件與 Users_staff.hbm.xml 文件類似,這里就 不在敘述。
    (3) hibernate.cfg.xml 的實現
    配置 hibernate.cfg.xml 文件,該文件主要作用是設置數據庫的類型、驅動以 及登陸數據庫所需的用戶名、密碼、url等,此外還要負責對象關系映射文件的 設置。 hibernate.cfg.xml 文件的具體配置如下:
    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE hibernate-configuration PUBLIC
    "-//Hibernate/Hibernate Configuration DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd"> <hibernate-configuration>
    <session-factory>
    <!—為 true 表示將 Hibernate 發送給數據庫的 sql 顯示出來 -->
    <property name="show_sql">true</property>
    <!-- SQL方言,這邊設定的是MySQL -->
    <property name="dialect">net.sf.hibernate.dialect.MySQLDialect</property>
    <!--一次讀的數據庫記錄數 -->
    <property name="jdbc.fetch_size">50</property>
    <!--設定對數據庫進行批量刪除 -->
    <property name="jdbc.batch_size">30</property>
    <!--驅動程序-->
    <property name="connection.driver_class">com.mysql.jdbc.Driver</property>
    <!--數據庫用戶名-->
    <property name="connection.username">root</property>
    <!--數據庫密碼-->
    <property name="connection.password">1234</property>
    <!—映射文件 -->
    <mapping resource="IrrigationInformationSystemWS/domain/Users_staff.hbm.xml "/>
    <mappingresource="IrrigationInformationSystemWS/domain/Farmland_user.hbm.xm l"/>
    <mappingresource="IrrigationInformationSystemWS/domain/Water_tickets.hbm.xml
    "/>
    <!-- 其他映射文,這里就不 列舉-->
    </session-factory>
    </hibernate-configuration>
    (4)實現 Dao 連接數據庫
    Service 依賴于 Dao 層,為了避免大量重復代碼的出現,所以將其抽取出, 并封裝到一個接口之中,而其它類繼承或實現這個通用的接口就可以了。因為 Dao層基本的就是CRUD操作,變化不是很大。Dao的實現代碼如下: package IrrigationInformationSystemWS.dao;
    import java.io.Serializable;
    import java.util.List;
    public interface BaseDao<T> {
    public void save(T entity);
    public void update(T entity);
    public void delete(Serializable id);
    public T findById(Serializable id);
    public List<T> findByHQL(String hql, Object... params);
    }
    DaoImpl 類主要是實現 Dao 的接口
    package IrrigationInformationSystemWS.dao.impl;
    import java.io.Serializable;
    import java.lang.reflect.ParameterizedType;
    import java.util.List;
    import javax.annotation.Resource;
    import org.hibernate.Query;
    import org.hibernate.Session;
    import org.hibernate.SessionFactory;
    import org.monday.dao.BaseDao;
    @SuppressWarnings("unchecked") // BaseDaolmpl 定義 Dao 的通用操作的實現
    public class BaseDaoImpl<T> implements BaseDao<T> {
    private Class<T> clazz;
    public BaseDaoImpl() { //通過構造方法指定 DAO 的具體實現類
    ParameterizedType type =
    (ParameterizedType) this.getClass().getGenericSuperclass(); clazz = (Class<T>) type.getActualTypeArguments()[0];
    System.out.println("DAO 的真實實現類是:"+ this.clazz.getName());
    }
    @Resource //向 Dao 層注入 SessionFactory
    private SessionFactory sessionFactory;
    protected Session getSession() { //獲取當前工作的 Session
    return this.sessionFactory.getCurrentSession();
    }
    public void save(T entity) { this.getSession().save(entity);
    }
    public void update(T entity) { this.getSession().update(entity);
    }
    public void delete(Serializable id) {
    this.getSession().delete(this.findById(id));
    }
    public T findById(Serializable id) {
    return (T) this.getSession().get(this.clazz, id);
    }
    public List<T> findByHQL(String hql, Object... params) {
    Query query = this.getSession().createQuery(hql);
    for (int i = 0; params != null && i < params.length; i++) {
    query.setParameter(i, params);
    }
    return query.list();
    }
    }
    (5)Service 層的實現
    Service 層主要是引用對應的 Dao 操作數據庫,完成相應的業務邏輯處理。 ServiceImpl是對Service中方法的實現。由于BaseServiceImpl類需要大量的代碼, 不便將其全部列舉出來,所以本文只對 BaseService 接口的方法做簡單的介紹, BaseService 的代碼如下:
    public interface BaseService {
    public void save(Object object);
    public void update(Object object);
    public void delete(Object object);
    public Object ReadByID(String targetName,int id); @SuppressWarnings("rawtypes")
    public List ReadAll(String targetName);
    public List ReadAllByOrder(String targetName,String propertyName,String order); @SuppressWarnings("rawtypes")
    public List ReadByProperty(String targetName,String propertyName,Object propertyValue);
    public List ReadByPropertyList(String targetName,List<String> propertyName, List<Object> propertyValue);
    public List ReadLimitedByOrder(String targetName,String propertyName,int num, String order);
    public Object ReadSingle(String targetName,String propertyName,Object propertyValue);
    public int ReadCount(String targetName);
    }
    (6)供客戶端調用方法的實現
    在Web Service部分,需要實現所有供Client部分調用的接口,比如說,查 詢水票信息、查詢農田用戶信息、查詢農田信息、查詢水位信息、查詢降水量等。 所有的方法都很類似,只是調用業務層時有所不同,圖 5-4 展示的是部分要實現 接口的方法。
    J [J] Fa rrn I a n d U s e rl nf □ .j a va
    」匕 Fa rm I a nd Us 已「Info
    0 getFarrnlandUserinfoE!yld(int) : FarmlandUser
    G g etFa rrnlandUserinfo B yN a m e (Etri ng) : List-Fa rm I a nd User :=■
    0 getFarrnlandUserinfoE!yTeI(String) : FarmlandUser
    G g etFa rrnlandUserinfo s 0 : Li st < Fa rm landU5er>
    J | [J] Staffinfo Java
    童 Q Staffinfo
    G g etFa rm I a nd Userinfo 5 0 : List< Staff:=■
    G getStafflnfoEly.Auth(int) : List< Staffs
    G g et£taffl nfo E! yl d (i nt) : Staff
    G getStafflnf□ ElyNam e(String) : List< Staff :=■
    G g etStaffl nfo E!yTe I (Stri ng) : Staff
    > [7] WaterLeve rinf□ Java
    • [J] W自t已rTicketlnfo.j ava
    ■ © WaterTicketlnfo
    Q getTick已tl門foElylidd門t) : String
    0 getTicketinfosQ : List =:Ticket>
    圖 5-4 Web Service 要實現的接口方法
    Fig 5-4 Web Service needed interface methods
    3. 部署 Web Service
    Web Service 的部署需要進行一些配置,這些配置操作非常簡單,因為 MyEclipse 已經為我們集成了這些功能,我們只需要按著 MyEclipse 的提示操作 即可。需要注意的是: FrameWork 選擇 JAX-WS, strategy 中選擇第二個(根據 java 文件創立Web Service)o重復以上步驟,使每一個需要暴露的方法均出現對應的 接口文件類(xxxDelegate.java),表示如圖5-5所示。
    >|T| Fa rm I a n dlnfo .j ava
    t> ||T| FsrmlandlnfoDelegate.iava I
    >[J] Fa rm I a n d U 5 e ri nf o .j ava
    t> pl F白門丁i丨自門ci U 5已「I門fci D已丨已q白t已■詁*自|
    >|T| Staffinfo .java™
    t> Pl 白ffl門fci D已I已g白tE j已朋|
    >|T| Wate rLeve ri nfo」ava
    'iJH白t已「L已*已「I門f ci D已I已g白t已j已朋|
    >[T| Wate rTi ck etl nfo j ava
    >||T| Wat e rTi ck etl nfo Delegate Java I
    圖 5-5 Web Service 配置圖
    Fig 5-5 Web Service configuration diagram 項目右擊添加庫文件:JAX-WS2.1Runtime Libariies 和 JAX-WS2.1API Web。 至此Web Service已經配置完畢,啟動Tomecat即可完成項目的部署。
    第六章 測試與驗證
    6.1 測試目的
    本文設計的灌區信息管理系統涉及到Android與Web Service以及移動網絡 等技術。通過測試,可以對該系統的運行狀態和效果有客觀的了解與評價,同時 也能檢驗系統中存在的一些問題,為之后的改進提供一些參考。
    6.2 測試環境的選擇
    硬件選擇:PC機(聯想B460:處理器Intel(R) Core(TM) i3、主頻2.4GHz、 內存 2G)、Android 移動手機(Coolpad 7820L:處理器 ARMv7 Processor rev 3 四 核 1.183GHz 內存 1G 分辨率 1280*720)。
    操作系統:Windows7 x64 旗艦版、Android 4.3。
    Web 應用服務器: Tomcat 6.0.20。
    數據庫: MySQL 5.6。
    6.3 測試結果
    將 IrrigationInformationSystemC.apk 發布到 Android 移動手機上,并啟動 Tomcat 服務器。其中 IrrigationlnformationSystemC.apk 位于 Eclipse 工作共空間目 錄下,其具位置在 workspace\android\IrrigationInformationSystemC\bin 文件夾下。
    組圖 6-1 為灌區信息管理系統運行過程中的部分截圖,包括用戶首次登錄軟 件、申請購水、水票驗證、農戶信息通知以及用戶管理。點擊 Android 手機上 IrrigationInformationSystemC 的圖標,進入首頁界面,點擊進入按鈕,進入網絡 設置的界面。正確填寫網絡參數,點擊確認,手機屏幕進入用戶登錄的界面,至 此完成用戶的登陸。成功登陸后,軟件進入主菜單界面。點擊“申請購水”按鈕, 進入購水界面。用戶可以在主菜單點擊“水票驗證”按鈕對數據庫中的水票信息 進行查詢。在用戶管理方面,用戶可以對自己的密碼進行修改。
     
     
    $ 4 <■» ◎:i 羣• 3 28«a 20:42
    IrrigationlnformationSystemC
    歡迎使用灌區信息管理系統! 進入
    登陸
    重置
     
    密碼:
    首頁 網絡設置 用戶登錄
    渠道編號: 農田編號: 預計放水時間: 預計結束時間:
    購水人土 申請人ID: 聯系電話: 單價:
    總量: 總價:
    主菜單
    申請購水 水票驗證查詢
    歷史數堀
    水票編號10001
    購水人姓名:張三 購水人編號20001 聯系電話:13903510000 單價:140元
    數:S:1畝 總價:140元
    農田編號3001001 渠道號3001 預計放水時間:201 5-03-10 08:00 預計結束時間:2015-03-10 13:00 用水狀態:未濯水
    購水曰期:2015-03-01
    用戶信息
    用戶購水信患
    農田信息
    降水■査詢
    農田用水值患
    歷史數據
    ID: 1
    操作:申請購水 嫌作時間:201503-01 20: 43 水81編號1000】■«
    ID: 2
    燥作:水累驗證
    損作時間:2015-03-01 20 : 43
    水票細號:10001 wa
    ID: 3
    燥作:農戶21知
    蝶作時間:201503-01 20: 44
    農戶fBSid:??
    農田信息
    水票驗證
    信息數據查詢
    歷史數據查詢
    用戶通知
    動填充短信內容
    用戶管理
    圖 6-1 系統運行測試組圖
    Fig 6-1 system running diagram
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
    上圖所顯示的結果均為在 AVD 正常運行的前提下,將系統的移動終端部分 打包發布在真機測試的結果。經過測試,基本上完成設計的需求,移動終端可以 成功的調用Web Service提供的接口,實現對Web Service端數據庫的CRUD操 作,并且將所查詢的數據在移動終端正確的顯示。在通知購水用戶模塊方面,能 成功的調用短信模塊和通話模塊,并且能智能地將所需的內容填寫好,完成對購 水用戶的通知。整體上,該系統做到良好的運行。
    總結和展望
    本文的工作總結
    隨著我國已經進入了 4G 移動互聯網時代,移動互聯網已經切切實實地改變 了人們的生活和工作。再加上智能手機性能的迅速提高,使得人們可以只通過一 部智能手機,就可以隨時隨地的查詢想要查詢的信息。無論在工作中還是娛樂中, 無線移動應用已在當今移動互聯網時代扮演著主要的角色,它也成為一個國家向 信息化時代邁進的中堅力量。
    本文主要針對我國灌區配水過程中的灌溉效率低下的問題,利用我國便利的 移動互聯網設計出一套基于 Android 和 Web Services 技術的灌區信息管理系統, 目的是方便我國農田灌水的工作。在該灌區信息管理系統中,實現了灌區管理系 統在灌溉配水過程中的信息化管理。在不需要進行大量投入的前提之下,為農田 灌溉配水帶來極大的便利。
    在整個系統的設計過程中,本文深入了解我國目前灌區組織系統的工作過程, 對目前灌區配水過程中的一些不合理因素做了認真的分析,提出本課題的研究內 容。本文綜合運用計算機Android編程、java編程、數據庫、Web Services、移 動通信網絡技術等先進技術,在系統設計之前,進行了大量的資料收集等準備工 作,直到系統設計開始時,并通過查看書籍和上網等方式不停地進行知識的補充。 現總結如下:
    1.深入了解我國農業用水的現狀和目前移動互聯網的便利性及國內外在農田 灌溉這方面的發展現狀。針對我國灌區信息管理系統中存在的一些問題,詳細了 解設計灌區信息管理系統的必要性和可實施性。
    2.主要了解灌區信息管理系統中所涉及到的相關技術,如移動通信技術、 Android 技術以及 Web Services 技術等。并且了解這些技術是如何相互聯系起來, 以及各個技術之間用到的一些其它技術,比如說 Web 服務器端是通過什么方式 向客戶端提供信息接口, Android 是通過什么方式完成調用 Web 服務器端提供 的接口。
    3.對本課題設計的方案做一個總體的規劃。首先要對農田灌溉信息管理系統 的設計總體需求做一個詳細的分析。然后根據需求分析,設計出適合本課題的總 體架構圖。
    4.詳細介紹了移動客戶端的設計與實現。根據總體方案的需求,實現移動終 端部分的功能。
    5.重點完成Web Services服務器端的設計與實現。在Web服務器端,主要完 成Web服務和數據庫等后臺的設計,并為Android提供相應的接口,以供Android 終端 App 調用。
    6.將 Android客戶端和Web服務器結合起來,完成Android對Web服務器的 信息查詢和其它操作過程。使整個系統搭建起來。并完成系統中代碼的編寫和調 試,最終做到系統的成功部署。
    最終完成灌區灌溉系統中數據的管理、傳輸及查詢。當農戶需要對農田進行 配水時,配水操作人員能方便地驗證農戶的繳費憑證,或根據實際情況在現場及 時地為農戶申請購水,配水等一系列工作。隨著移動互聯網迅速的發展和高性能 智能手機的不斷推出,該系統的性能也將不斷提高。
    展望
    雖然本系統基本實現了需求的功能,但是系統界面還不是很美觀、友好。一 款軟件的成功不僅僅在于其功能的強大,界面設計也占了其成功因素的半壁江山。 為了能讓用戶在使用軟件同時,給用戶帶來一種視覺的愉悅感,所以在下一步工 作中,盡量設計出友好美觀的界面,從而增強用戶的體驗。另一方面,在數據傳 輸方面,還需對數據的傳輸進行加密(對稱、非對稱)等措施,進而做到數據的 安全。
    目前,隨著我國已經進入 4G 網絡時代,移動互聯網已經越來越方便,再加 上市面上已經出現越來越多的高性能手機,并且價格也都是大眾所能接受的,當 然人們對手機的要求也越來越高。相信Android技術與Web Services相結合的灌 區信息管理系統能提高農田配水的效率,給灌區組織的工作人員和農田購水用戶 均帶來極大的方便。同時也解決了灌區配水過程中的一些糾紛,進一步保證灌區 配水過程中購水用戶、配水操作員工、管區系統三者的利益,劃分各方在配水過
    程中的責任。相信該系統會得到廣泛的應用。
    參考文獻
    [1]趙九洲.基于Android的灌區管理信息系統研究[D].鄭州大學.2012
    [2]http://www.china.com.cn/node_7064072/content_19634796.htm
    [3]張成心•低功耗節水灌溉系統的優化設計與應用[D]•昆明理工大學,2014.
    [4]http://www.baike.com/wiki/農業
    [5]賈玉平.灌溉渠系配水與農業用水管理系統的研究[D].西北農林科技大學, 2004
    [6]http://gg.aquasmart.cn/hyjs/4340.html
    [7]http://www.chinabaike.com/t/9707/2013/0608/1249645.html
    [8]劉帥旗.Android移動應用開發從入門到精通[M].北京:中國鐵道出版社, 2012.
    [9]祝忠方.基于Android的移動互聯終端的設計和實現[D].北方工業大學2014
    [10]孫宏明.Android設計入門、應用到精通[M].北京:中國水利水電出版社,2012.
    [11]Sampathkumar, M, Hugar, L B, Poddar, R S, Hiremath, G M. Irrigation
    Information Management through Information and Communication Technology- A Case Study of Command Areas in Karnataka[J]. Indian Journal of Agricultural Economics, 2011, 66 (3):538.
    [12]R.Salvador,B. Latorre,P. Paniagua,E. Playan. Farmers' scheduling patterns in on-demand pressurized irrigation[J]. Agricultural Water Management, 2011,102 (1):86-96.
    [13]謝菲.基于Web的灌區信息化管理系統的研究與開發[D].華中科技大學, 2007.
    [14]http://finance.chinanews.com/cj/2013/11-26/5550036.shtml
    [15]Aysun Kara Tuncer,Safa Tuncer. Effect of Different Final Irrigation Solutions on Dentinal Tubule Penetration Depth and Percentage of Root Canal Sealer[J].Journal of Endodontics,2012,38(6):860-863..
    [16]Giovanni Caruso, Hava F. Rapoport, Riccardo Gucci. Long-term evaluation of yield components of young olive trees during the onset of fruit production under different irrigation regimes[J]. Irrigation Science, 2013, 31(1): 37-47.
    [17]Awudu Abdulai, Victor Owusu, John-Eudes A. Bakang. Adoption of safer irrigation technologies and cropping patterns: Evidence from Southern Ghana[J]. Ecological Economics, 2011, 70(7): 1415-1423.
    [18]程方.移動通信系統演進及3G信令[M].北京:電子工業出版社,2009.
    [19]張天魁,馮春燕,曾志民等.B3G/4G移動通信系統中的無線資源管理[M].北 京:電子工業出版社, 2010.
    [20]樊昌信,曹麗娜.通信原理[M].北京:國防工業出版社,2011.
    [21]張曉林,國強,竇崢.CDMA移動通信技術[M].哈爾濱:哈爾濱工程大學出 版社, 2010.
    [22]李軍.TD-SCDMA HSDPA系統設計與組網技術[M].北京:電子工業出版社,
    2010.
    [23]文志成,張偉.GPRS網絡技術[M].北京:電子工業出版社,2005.
    [24]孔德恩,胡愛群.GPRS數據終端的研究與實現[J].微計算機信息,2007, 23(33): 105-107
    [25]王映民,孫韶輝.TD-TLE移動寬帶系統[M].北京:人民郵電出版社,2013.
    [26]徐國強.基于Android的移動視頻監控系統設計[D].太原:太原理工大學, 2014.
    [27]Cheng Min Lin, JyhHorng Lin, ChyiRen Dow, et al.Benchmark dalvik and native code for Android system[C]//2011 Second International Conference on Innovations in Bio-inspired Computing and Applications(IBICA), Shenzhan, 2011: 320-323.
    [28]Noma M, Saiwaki N, Itakura S, et al. Composition and Evaluation of the Humanlike Motions of an Android[C]//2006 6th IEEE-RAS International Conference on Humanoid Robots, Genova, 2006: 163-168.
    [29]岳傳真.Android系統移植和應用程序開發[D].上海:復旦大學,2010.
    [30]KiCheol Son, Jong YeoLee. The method of android application speed up by using NDK[C]//2012 International Conference on Awareness Science and Technology (iCAST), Dalian, 2011: 382-385.
    [31]田靜.Android多點觸摸遙控系統的研究與實現[D].西安科技大學2012.
    [32]胡銳.基于Android系統智能手機的游戲移植開發[D].華南理工大學2011.
    [33]張嘉賓.Android應用的安全性研究[D].北京郵電大學2013.
    [34]秦凱.Android開源社區應用項目開發的效率研究[D].華南理工大學2012.
    [35]凡海飛.基于Android平臺的無線點菜系統的設計與實現[D].華中科技大學
    2011.
    [36]黃鑫.基于Android的大學生個人課程助理系統的設計與實現[D].廈門大學
    2014.
    [37]房鑫鑫.Android惡意軟件實現及檢測研究[D].南京郵電大學2013.
    [38]奚寧.基于Android的智能醫療信息服務系統服務器端設計與實現[D].吉林 大學 2013.
    [39]EricArmstrong 著.詹文軍,廖錚譯.Java Web Services 教程[M].北京:電 子工業出版社,2003.
    [40]Guangzhou."Mobile webserver to the Android platform". ISECS International Colloquium on Computing. Communication. Control, and Management (CCCM).2010.
    [41]呂瑞明.基于移動通信平臺的Web Services訪問模式的研究[D].武漢: 武漢理工大學, 2007.
    [42]Rendon O, Pabon F, Vargas M, Guaca J. Architectures for Web services access from mobile devices[J].Third Latin American Web Congress, 2005: 50-55.
    [43]張磊,彭艦,李紅.移動設備上實現Web Service技術的研究及應用[J].計 算機應用, 2004,24(12): 144-146.
    [44]Y.Daniel Liang著.李娜譯.Java語言程序設計基礎篇[M].北京:機械工業出版 社, 2011.
    [45]Y.Daniel Liang著.李娜譯.Java語言程序設計進階篇[M].北京:機械工業出版 社, 2011.
    [46]江澤鋒.基于Web Services的企業應用集成研究與應用[D].重慶大學2004.
    [47]Robert Englander著.黃剛譯.Java與SOAP[M].北京:中國電力出版社, 2002.
    [48]Nilo Mitra, Ericsson, Yves Lafon, W3C.SOAP Version 1.2 Part 0: Primer (Second Edition) [EB/OL].http://www.w3.org/TR/2007 /REC-soap12-part0- 20070427, 2007.4.27.
    [49]王建偉.基于Web Services的SOA架構設計方法的研究[D].大連海事大學 2006.
    [50]郭晉偉.SOA架構的管理信息系統設計與實現[D].中國科學院研究生院(沈 陽計算技術研究所).2006.
    [51]劉振杰.基于C/S與B/S混合模式的煤礦安全管理信息系統研究[D].中北大學, 2011
    [52]袁靜,胡昌華,龍勇等.基于C/S+B/S雙模式的分布式遠程診斷專家系統[J]. 計算機工程, 2006, 32 (12): 196-198.
    [53]于洋.基于Ajax/REST風格的Web Service的設計與實現[D].北京交通大 學,2010.
    [54]金雯嵐.Ajax技術在博客系統中的應用[D].大連海事大學2008
    [55]馮海隆.基于GPRS和C/S+B/S的挖掘機遠程監控及故障診斷系統的初步研 究[D].浙江大學,2006.
    [56]Bruce Eckel著.陳昊鵬譯.Java編程思想[M].北京:機械工業出版社,2013.
    [57]張桂元,賈燕楓.Eclipse開發入門與項目實踐[M].北京:人民郵電出版社, 2006.
    [58]kalogen. Eclipse 下使用 Xfire 創建 Web Service 入門示例 [EB/OL].http://kalogen.javaeye.com/blog/255744.2008-10-21.
    [59]Eric Freeman,ElElisabeth Freeman 著,O'Reilly Taiwan 公司譯.Head First 設 計模式[M].北京:中國電力出版社,2007.
    【本文地址:http://www.bzhlmm.com//guanlilei/gongshangguanli/xixinguanli/5845.html

    上一篇:大學生志愿者信息管理系統的設計與實現

    下一篇:面向結構行為的鋼橋BIM信息管理研究

    相關標簽: