摘 要 I
ABSTRACT III
第1 章 緒 論 1
1.1 研究背景和意義 1
1.2 國內外研究現狀 2
1.3 本文工作與技術路線 3
1.4論文結構 5
第2 章 基本概念與原理 7
2.1 ANDROID 平臺 7
2.6 ANDROID 程序中的界面設計技術 12
第3 章 農業信息化平臺數據采集系統需求規格 15
3.1 軟件及硬件應用環境 15
3.2 軟件功能規格及用例驗證 15
3.2.3用例1:登錄驗證 16
3.2.4用例2:農戶管理 17
3.2.5用例3:地塊管理 18
3.2.6用例4:隔離區管理 19
3.3 性能需求 20
第4 章 農業信息化平臺數據采集系統總體設計 21
4.1 面向功能分解的軟件結構圖 21
4.2 三層架構的設計 21
4.3 ACTIVITY 設計與實現 24
4.4 系統總體結構 27
4.5 數據模型設計 29
4.5.1概念模型 29
4.5.2數據表 29
4.6接口設計 31
4.6.1人機交互接口設計 31
4.6.2業務控制接口設計 33
第5 章 農業信息化平臺數據采集系統的詳細設計與實現 35
5.1模塊的詳細設計與界面的具體實現 35
5.1.1模塊的詳細設計 35
5.1.2界面的具體實現 40
5.2 自定義控件及復用 43
5.3配置文件 45
5.4系統部署 47
第6 章 結論 49
參考文獻 51
作者簡介及在學期間所取得的科研成果 53
致 謝 54
第1章緒 論
1.1研究背景和意義
我國自古以來就是農業大國。農業是第一產業,是國民經濟的基礎。我國十三億人 口的糧食主要來自本國的農業。農業不僅為國計民生提供糧食、蔬菜、肉類等食品,也 為工業提供基本的原料。
在過去的農業生產中,人們往往使用紙和筆記錄農業生產的相關數據。傳統的紙質 方式采集農業生產數據,存在如下幾個弊端:(1)手工記錄數據,記錄速度慢;(2)采集 數據時很容易造成數據的重復和冗余;(3)只針對單一時間單一區域進行數據的采集,不 方便在橫向上同其他地區、縱向上同往年的數據進行列表分析,不同地區的農業生產數 據信息難以共享;(4)通過紙質方式采集數據,逐層上報,造成信息延遲,數據的實時性 較差。
我國政府越來越重視農業問題,尤其是農業生產中的農業信息化建設。2011年,我 國政府提出了《全國農業農村信息化發展“十二五”規劃》。“規劃”中的第三部分“主要 任務”之一,就是加快推進種植業信息化。這里要求我們積極推動GPS、GIS、RS等現 代信息技術在現代農業生產的應用,提高現代農業生產設施裝備的數字化、智能化水平, 發展精準農業。“規劃”中的第五部分“重點工程”中也提到,加強種植業信息化建設。 要選擇具有地方特色的典型農作物,充分發展GPS、GIS、RS以及3G等現代通信、遙 感、信息技術,強化在農作物的種植過程中的信息監管,提升農業生產信息化、標準化 水平,進而提高單產量,提升農產品質量[1]。
目前,我國各個領域的信息化正在以日新月異的態勢迅速發展、普及。不同種類、 不同功能的的信息化技術及其相應的信息管理系統也隨之誕生。隨著我國國民經濟的快 速發展,以及信息技術的不斷進步,各級政府以及農民群體也逐步認識到了農業信息化 的重要意義,正在全力積極地推進農業信息化的發展。
盡管政府部門已經認識到了農業信息化的重要性,也加大了對農業信息化建設的資 金注入和建設的力度。但是不可否認,對農業的重視程度依然不及工商業、服務業。這 也在某種程度上造成了農業領域的信息化技術落后于其他領域這一現實。相比較于其他 領域的信息化進程,我國的農業信息化進程起步較晚,發展較為落后。我國的農業信息 化發展主要存在以下的問題:(1)農業信息化建設過程中各項標準尚不規范;(2)農業信 息化局限于區域內,尚未實現大范圍內的信息共享;(3)農業信息化的發展存在著地區差 異,總體來說,東部山東、江蘇、東南沿海等省份農業信息化進程較快,而西部地區發 展較慢。造成這些現象的原因是多方面的。主要原因是,我國的農業企業普遍規模小, 管理水平不夠規范,對先進生產技術的應用有限,對農業信息化的重要意義認識有限。 此外,農民對計算機的擁有和使用依然處于較低水平,農村的網絡建設水平更是偏低, 這些都在客觀上加大了農業信息化技術在農民中推廣的困難。
當前,我國需要的是建立統管全局的全國性的農業信息化系統,實現多層次、多地 區、多功能的農業信息化管理平臺。為了更好地實現系統內部、各個分支的通信與信息 共享,計算機相關技術中,移動開發技術是建立這個平臺的重要組成。
隨著移動開發技術的進步和智能手機的普及,農業信息化改變了傳統的野外調查方 式[2]。相對于傳統紙質記錄方式,使用智能手機進行農業信息采集,優勢更加明顯,不 僅保證了信息的實時性,而且避免了大量數據的重復記載和錄入,同時依靠智能手機本 身的硬件特點,如照相、GPS信息獲取、語音等功能,使信息獲取和篩選更加便利,所 以智能手機在農業領域必將得到廣泛使用[3]。通過移動終端設備進行數據信息的采集, 是農業信息化平臺中網站管理的重要補充,也給農業生產的信息管理帶來更大便利。
農業信息化平臺數據采集系統,是基于Android操作系統的應用軟件。該軟件系統 實現的功能是使用Android智能手機采集農業生產中的基礎數據,集農村信息、農戶信 息、地塊檔案信息、地塊制種信息、隔離區檔案信息、隔離區栽培信息等數據于一體。 農業信息化工作人員使用基于 Android 手機的“農業信息化平臺數據采集系統”,可以 高效、快捷、實時地在農業生產環境中采集數據。選題具有實際意義。
1.2國內外研究現狀
歐美許多國家很早就將信息化技術應用于農業領域,尤其是美國和德國。這些國家 主要是通過使用計算機技術、計算機自動控制等,實現農業機械管理自動化、精準農業 等一些技術,發展農產品門類的電子商務,實現覆蓋一定區域的農業信息系統等。
當前,在我國,盡管各行各業都在向著信息化的方向飛速發展,但是我國的農業信 息化起步較晚,發展仍然比較落后。我國農業信息化進程中存在的問題主要包括:農業 信息化標準不夠規范、不夠健全;農業信息化的發展局限于區域和行業,農業信息化的 發展呈不均衡的態勢。
目前,我國的農業部門的信息采集逐步覆蓋種植業、漁業、畜牧業、農機等領域, 涉及農業生產、銷售、推廣、安全、防災、環境等內容。農業部以不同方式進行了信息 資源的研發與利用,建立相關數據庫,分析相應的數據。在地方,農業信息化技術已經 在一些地區進行了試點的應用,如北京、上海、山東、河北、黑龍江等。其領域覆蓋灌 溉自動控制、農產品分類、農產品數字圖像處理等。
然而,相比較于歐美國家,我國的農業信息化技術仍然是落后的。盡管國家加大了 建設農業信息化的力度,但基礎設施不完善,交通落后,技術比較滯后,農業信息化的 建設依然任重道遠[4]。
目前,農業信息化平臺的使用在逐步展開,但具體的應用存在一些問題。農業相關 軟件和一些農業信息化網站僅僅覆蓋了農業生產環節中的極小部分。如只是針對個別省 份,或者針對個別作物的生長,或者個別產品的銷售。農業科學信息服務針對農業生產 的信息,提供了檢索。但又由于我國農民網絡水平的限制,利用率有限。一些物種公司 也正在研究集生產、銷售、農業推廣、防災于一體的綜合信息處理平臺。
移動開發,又叫做手機開發,或稱為移動互聯網開發。其意義是以手機平板電腦等 移動設備終端為基礎,進行開發工作[5]。移動互聯網,顧名思義,就是把移動通信技術, 與互聯網技術想結合而組合成為一體。移動互聯網產業的持續發展,無線網絡的飛速發 展,尤其是全球互聯網時代的到來,使移動應用逐漸豐富。
近年來,手機游戲、移動社交、多媒體應用、位置服務、移動電子商務等應用的開 發規模逐漸擴大。據統計,當前市場上,一些移動設備的運算速度已經不亞于 2001 年 個人計算機的運算速度。因此,越來越多的領域開始使用移動設備進行信息處理與日常 應用,移動辦公變得快捷、方便、高效。
目前,智能移動終端的市場基本由谷歌公司的Android系統、蘋果公司的IOS系統, 以及微軟公司的Windows Mobile系統三方占據。而Android已經成為當前使用范圍最廣 的智能移動終端操作平臺。2011年以來,Android系統成為了世界范圍內占有率最好的 智能手機的操作系統。Android作為一種新興的開源的操作系統,應用于智能手機、平 板電腦等移動設備中,有著強大的生命力。
由于手機體積小巧,攜帶方便,信號覆蓋范圍比較廣,不僅可以在生活中隨時使用, 在農業生產中應用起來同樣很方便。將農業信息化系統、農業物聯網等都可以移植到手 機上同步應用。這也是一個新興的課題。
1.3本文工作與技術路線
本文的主要工作是研究Android應用軟件開發技術,根據農業信息化平臺的實際需 要,來分析、設計并實現基于Android智能手機的農業信息化平臺數據采集系統。
本文所做的具體工作如下:
(1)研究相關技術。首先,本文研究了研究農業信息化平臺數據采集系統開發所需 要的相關開發技術,即 Android 應用開發技術。這其中包括 Android 平臺的發展史、 Android平臺的特性、Android平臺的系統架構、Android應用程序的組成部分、Android 應用開發中的數據庫技術,以及Android程序的人機交互界面設計技術(UI)。Android操 作系統是一個新興開源的移動操作系統,具有開放性、程序平等性、開發快捷等特性。
Android平臺的系統架構可以分為Linux內核層、Android運行庫層、應用程序框架層, 以及應用程序層。進行 Android 應用軟件的開發,主要是關注應用程序層。在 Android 應用程序中,通常使用SQLite這一輕型數據庫,因為其具有輕量級、獨立性、隔離性、 跨平臺、多語言接口、較高安全性等優勢。在Android應用開發的界面設計中,常常使 用 XML 的布局文件進行窗口界面設計。布局文件常用的有線性布局、表格布局、幀布 局、相對布局等。
(2)需求分析。了解農業信息化中業務員的工作流程,分析“農業信息化平臺數據 采集系統”所需的用例及每個用例的活動流程。定義農業信息化平臺數據采集系統使用 的軟硬件環境,分析軟件的功能性需求以及各種非功能性需求。
(3)系統設計。設計“農業信息化平臺數據采集系統”的方案,根據軟件需求和 Android 開發的特點依次完成概要設計、詳細設計。根據需求規格,分析軟件系統的架 構層次,設計軟件系統的數據模型、接口、模塊。根據需求規格,把該軟件分為農戶管 理、地塊管理、隔離區管理、用戶管理四個大模塊。根據Java語言面向對象的特點,利 用分層開發的思想,在開發時將軟件代碼分為數據庫、業務邏輯、適配器、人機交互接 口、UI界面這五個層次。使用統一建模語言,即UML進行農業信息化平臺數據采集系 統的軟件系統設計。在需求分析定義使用系統的角色以及系統基本用例的基礎上,對軟 件系統進行邏輯設計,即定義每一層次的包(Package),以及每一層中的類(Class)。根據 UML 2.0語言的特點,將基本數據表定義為實體類(entity),作為持久數據層。將業務邏 輯及數據庫適配器的相關類定義為控制類(control),負責數據業務的處理。把人機交互 的接口定義為邊界類(boundary),邊界類也是使用系統的角色(actor)與控制類的中間類。 用戶只能通過邊界類,調用控制類,對實體類進行操作。根據這一設計思想,做出軟件 系統的包圖、類圖,以及每個業務操作的序列圖。在完成了軟件系統的邏輯設計的基礎 上,對軟件系統進行組件設計。根據軟件模塊的劃分以及邏輯設計,設計軟件系統需要 的組件(component).程序的組織,確定各個程序模塊的調用關系,做出軟件系統的組件 圖。
(4)軟件開發。根據設計方案,配置軟件開發所需要的環境,完成軟件的編碼。軟 件開發使用的是Java語言,利用Eclipse開發工具及針對Android的可視化編程插件ADT 進行編碼。
(5)軟件測試。設計軟件測試方案,對每個測試用例進行測試,改善軟件的功能與 性能。
在本文中,研究農業信息化平臺數據采集系統的技術路線如圖 1.1 所示。
1.4論文結構
本文共分為六章。每一章的具體內容如下:
第一章:緒論。介紹軟件系統的研究背景和意義,介紹農業信息化、移動開發及 Android 平臺的研究現狀,概況本文研究的工作和技術路線,并對論文的內容與結構做 安排。
第二章:相關技術介紹。介紹Android平臺的發展歷程,Android平臺具有的新特 性。介紹Android應用軟件在開發時所應用相關技術,包括Android平臺的系統架構、 Android應用程序的組成部分、Android開發中的數據庫技術,以及Android應用程序的 界面設計技術。
第三章:農業信息化平臺數據采集系統需求規格。根據農業信息化的實際需要,也 對軟件系統的角色、用例下定義,分析每一個用例所進行的流程,使用UML語言做出 每個用例的流程的活動圖。在提出農業信息化平臺數據采集系統的功能需求后,提出農 業信息化平臺數據采集系統的性能需求,包括界面需求、空間需求、時間需求、擴展性 需求和健壯性需求。
第四章:農業信息化平臺數據采集系統總體設計。設計軟件系統的體系結構,設計 界面的層次即調用關系,設計軟件系統所需的數據庫、數據庫適配器和模塊。使用UML 語言,做出系統的包圖、每個模塊的類圖,以及每個操作的序列圖。
第五章:農業信息化平臺數據采集系統的實現。設計軟件系統所使用的界面,根據 概要設計所劃分的層次,對每層次做詳細設計,并設計系統復用的自定義控件,以及系 統所需的配置文件。使用UML語言,做出系統每個模塊的組件圖,以及整個系統的部 署圖。
第六章,結論。針對實現的軟件系統進行優缺點分析,并針對存在的不足做出后續 工作的展望。
第2章 基本概念與原理
2.1Android 平臺
Android的本意是“機器人”因此其代表圖標就是一個綠色的機器人。Android操 作系統是基于Linux的開源的操作系統。Android操作系統的組成可以分為操作系統、 應用軟件、中間件、用戶使用界面等,組成一個移動設備的平臺,并可以應用于手機、 平板電腦等多種移動設備。
2007年11月,谷歌公司發布了世界上第一個智能手機操作系統,即Androido其 創始人是安迪•羅賓(Andy Rubin)及他的團隊。谷歌公司聯合了世界上多家硬件制造商、 軟件開發商和電信運行商,結成了 Android 聯盟,為這些手機制造商提供全方位的 Android技術支持。
2008 年 9 月,美國運營商 T-Mobile 在紐約發布了世界上第一款 Google 手機, T-Mobile G1o該手機的臺灣HTC代工制造,是世界上第一部使用Android操作系統的 智能手機。Android T-Mobile G1的Google手機可以使用網絡CDMA/HSPA。
Android平臺在不斷發展,每一次平臺的更新,都會推出一個相應的API level,即 APID級別。下面簡要地描述Android操作平臺相關的API的發展歷史。
Android 1.1:歷史上第一版Android的API,發布于公元2008年9月。
Android 1.5:發布于2009年4月30日。在Android 1.1的基礎上,集成了攝像、 藍牙、上傳視頻等功能;該API還可以在屏幕上進行復制、粘貼;該API可以在手機頁 面實現搜索功能;改善了用于導航的GPS的性能質量;從API 1.5起,屏幕上支持虛擬 鍵盤,擴大了屏幕的尺寸;手機會根據重力感應以及應用程序的需要,自動實現屏幕旋 轉;增加了音樂播放器的功能,也增加了相框widgets的功能。
Android 1.6:發布于2009年9月15日。Android 1.6對于Android應用市場、瀏覽 器、多選刪除功能、語音閱讀和搜索等功能有了改善;支持 CDMA 網絡;重新設計照 相接口;提供對VPN的支持;支持OpenCore 2的媒體引擎。
Android 2.0:發布于 2009 年 10 月 26 日。支持動態桌面設計;對攝像功能中的閃 光燈、數碼調焦等有了更好的支持;支持HTML5;硬件速度得到優化。
Android 2.2.1:發布于2010年5月20日。提供了對3G網絡、Flash的支持;提供 了更多的Web應用程序支持的接口;操作系統的整體性能得到改善。
Android 2.3:發布于2010年 12月 7日。優化了用戶界面;提供了本地代碼直接存 取輸入;API 2.3還增加了感應器的事件處理;API 2.3還提供了手機圖形處理模塊,也 就是EGL/OpenGL ES;改善了電源管理系統;支持文字一鍵選擇、復制、粘貼;增加 了新版垃圾回收與優化處理事件;提供了新的音頻效果器;提供對前置攝像頭、SIP/VOIP 和NFC等的支持。
Android 3.0:發布于2011 年 2月2日。對于平板電腦設備提供了優化;增添了增 強網頁的瀏覽功能。
Android 3.1:發布于2011年5月11日。提供優化了的Gmail郵箱;提供了可以滾 動的任務管理器;提供了對USB輸入設備的支持;提供了對Google TV的支持。
Android 3.2:發布于2011年7月13日。引入了應用顯示的縮放功能。支持七寸的 移動設備。
Android 4.0:發布于2011年10月19日。API 4.0全新的用戶界面設計;API 4.0提 供了全新網頁瀏覽器,也就是Chrome Lite,這一瀏覽器具有了離線閱讀的功能,而且 還為用戶群體提供了隱身模式;API 4.0增加了手機圖片的截圖功能,在圖片的處理的 功能和性能上也有了更大的改善;在Android平臺自帶的照相機方面,API 4.0增加了更 廣泛的功能,如使用濾鏡、添加相框, 360度全景拍攝;新功能的聯系人。
Android 4.1:發布于2012年6月28日。其特效動畫的幀速提高到了 60fps,增加 了 3倍的緩沖;增強了通知欄和搜索功能;用戶對桌面插件能夠自適應地調整尺寸;擴 展了手機的特效和輸入法;無障礙操作的性能也得到了進一步的改善。
Android 4.2:發布于2012年10月30日。集成了 Photo Sphere全景拍照功能;改進 了手機的鎖屏功能;Gmail郵件能夠縮放顯示;添加了 Daydream的屏幕保護程序;提 供對Miracast無線顯示共享的支持等等。
作為一個新興的開源的操作系統,Android平臺具有如下特性。
(1)開放性
Android 平臺是一個開源的移動開發平臺。這種開放性同時針對著底層的 OS 和上 層的應用程序及用戶的使用界面。Android是一個針對第三方軟件完全開放的平臺,開 發者擁有極大的自由開發的空間。
(2)應用程序的平等性
在Android操作系統中,所有的應用程序都是完全平等的。應用程序都運行于虛擬 機之上,而且應用程序使用的是虛擬機提供的供應用程序與硬件資源通信的接口。
(3)應用程序間的無界性
在 Android 平臺中,應用程序的界限被打破。一個應用程序不僅可以通過調用 API 來訪問系統的資源與功能,也可以聲明自身的用途,供其他應用程序使用。例如,Android 軟件開發人員可以把本地聯系人、日歷、地理位置等信息與互聯網的數據相結合,為用 戶提供更多的功能和體驗。
(4)應用程序的快速開發
Android 平臺為開發者提供了大量豐富的開發工具,尤其是可視化工具。這樣,開 發者就可以快捷地開發自己的應用程序。
一般地,把Android平臺分成四層,自底向上依次為Linux內核層、Android運行 庫層、應用框架層、應用程序層。其中,Android Runtime是Android運行時的一種特殊 狀態,位于Android運行庫層。圖2.1為Android平臺的系統架構。
圖2.1 Android系統架構
(1)Linux內核層
Linux內核,也即Linux Kernel。實際上,Android系統正是位于Linux操作系統之 上,采用的是 Linux 2.6 版本的內核,包括各種硬件設備的驅動,如攝像頭驅動、顯示 驅動、Flash閃存驅動、鍵盤驅動、Wi-Fi驅動、電源管理驅動等等。Linux內核層用來 提供系統底層服務,如內存管理、進程管理、網絡堆棧、設備驅動等服務[7]。 Android 系統中的Linux不同于PC電腦中的Linux,它是經過了一定的精簡,能耗小,適用于移 動設備的開發和應用。同時,Linux內核層也是軟硬件的連接層。軟件開發者不需要關 心內核,可以把全部精力用在上層軟件開發中。
⑵Android運行庫層
該層包含一組核心庫(提供了 Java 語言核心庫內的大部分功能)和虛擬機。同時 Android提供了豐富的庫類支持,大部分為開源代碼,如采用的數據庫為SQLite是一套 輕型數據庫。運行庫層可以看做是一個C/C++的庫,庫中的函數并不能被Android程序 員直接調用,而是通過組建的形式間接被使用。這個庫中有標準C函數庫、瀏覽器引擎、 2D和3D圖形庫(見圖2.1中OpenGL),還有媒體功能庫(見圖2.1中Media Framework)。 主要的系統庫及功能如下。
媒體函數庫:媒體函數庫以 PackVideo 公司的產品 OpenCore 為基礎,可以錄制、 播放多種常見的影音格式,使用方便。
Surface Manager:合成2D和3D圖形的繪圖軟件。
Web Kit:這是一個網頁瀏覽器的引擎。它可以被Android內部瀏覽器所調用。同時, WebKit也是一個開源的項目。
SGL: Android平臺上2D圖形的繪圖引擎。
OpenGL ES:是3D圖形的函數庫。這個函數庫既可以由硬件加速實現,也可以由 軟件方式執行。
SQLite: 一個輕量級的數據庫,并且提供對關系數據庫事務的支持。 媒體框架:提供對各種視頻及音頻的支持。
Dalvik 虛擬機是一個基于寄存器級別的 Java 虛擬機。相對于其他的虛擬機來說, Dalvik虛擬機的特點是所耗費的能源比較少,占用的內存少,硬件的實現相對也比較容 易。
(3)應用框架層
應用框架層,即Application Framework,位于Android運行庫層之上。對于Android 開發人員來講,他們具有訪問Android框架API的全部權限,即Android開發人員是在 框架層上開發各種應用[6]。應用框架層所包含的的主要應用程序的框架如下:
活動管理器(Activity Manager):操作系統運行應用程序時,都要為此分配進程或線 程,而進程或線程都有其各自的生命周期。生命周期的管理由活動管理器來控制。
內容提供者(Content Provider):內容提供者提供了應用程序之間的進行共享的數據。 窗口管理器(Window Manager):窗口管理器管理全部的窗口程序。
資源管理器(Resource Manager):資源管理器提供了本地字符串(尤其是中文詞組)、 圖片、XML布局文件等資源,以供應用程序層來引用。
位置管理器(Location Manager):位置管理器提供了 Android操作系統的位置服務, 該框架主要是為與地圖搜索相關的應用所調用。
視圖系統(View System):視圖系統包含了構建一個應用程序所需要的基本組件,例 如按鈕、文本框、日歷、單選框等等。
(4)應用程序層
應用程序層是Android系統架構的最頂層。Android系統本身會附帶一些應用程序, 如計算器、通訊錄、地圖、瀏覽器(見圖2.1中Browser)等等。一個Android應用程序 既可以全部使用Java代碼來進行開發,也可以部分使用Java代碼部分使用C/C++代碼 開發,然后通過Android NDK技術以及JNI調用來實現。
Android應用軟件的開發通常處于Android架構中的頂層,即應用程序層。
一個Android應用程序,通常需要包含以下幾個部分:src包、gen包、android.jar 包、assets 包、res 包、AndroidManifest.xml 文件、project.properties 文件。
(1)src 包
在src包中存放的是Android應用程序的源代碼,主要是Java代碼。該目錄下還可 以存放不同的包,包中對應分層次或分模塊的源程序。Android應用程序開發人員的主 要精力也就在src包中。
在Android源程序中,Activity是一個非常重要和非常基本的模塊。一般來說,一 個 Activity 代表一個手機屏幕的一頁,或一個手機的窗口。可以把 Activity 理解為一個 UI的容器,在Activity中可以添加一些控件,并對這些控件設置一些事件,如添加一些 Button、Spinner、DatePicker 等控件,點擊 Button 來實現 Activity 之間的轉移,通過 DatePicker設置時間等。
(2)gen 包
在gen包中,最重要的就是自動生成及修改的java文件R.java。R文件包含許多內 部類,內部類又包含很多常量。這些常量的來源是res包中的不同類型的資源,如圖片、 用戶界面、字符、顏色等等。每一個資源都有對應的資源編號,即id屬性。這些資源是 隨著res包自動生成或者修改的。
(3)android.jar 文件
android.jar 是 Android 應用程序整個項目工程的工具類。里面注明了該項工程使用 的Android的版本號。可以在開發中根據需要改變版本。
(4)assests 包
Assests 包用于保存原始的資源文件,里面的文件會被編譯到可執行的安裝包 apk 中,并且原來的文件名會被保留。開發人員可以使用 URL 進行系統資源的定位,然后 使用AssetManager類以二進制流的方法來讀取文件的內容[8]。
(5)res 包
res包存放系統的各類資源。根據資源的性質,res包下又包含不同的子包。
子包drawable保存系統所需要的圖片資源。為了方便不同屏幕分辨率的手機顯示格 式的圖片,drawable 分為 drawable-hdpi、drawable-ldpi、drawable-mdpi,即圖片質量有 高、低、中的區分。
子包Layout,位于../res/文件夾下,屬于軟件需要的布局資源。顧名思義,Layout 文件夾下包含的.xml文件是Activity對應的基本布局文件。Activity通過方法 setContentView (R.layout.X )來獲取布局文件[刃。
子包values,位于../res/文件夾下,屬于軟件的引用資源。子包values可以包含 string.xml、arrays.xml、colors.xml等配置文件,其意義依次是中文短語配置文件、數組 配置文件、顏色配置文件。
通過Rjava中代碼來調用,而非直接使用資源,其意義在于實現代碼和資源的分離, 便于程序的分層管理和維護。
隨著res中資源的變化,gen包中的R.java文件也隨之更新。
(6)AndroidManifest.xml
AndroidManifest.xml是一個Android程序中最基本的配置文件,位于工程項目的根 目錄。AndroidManifest.xml的作用在于描述Activity> Service、Provider等各自的組件及 實現,還能指定程序所需要的硬件及接口[10]。
(7)project.properties 文件 該文件是項目的屬性。
在Android應用軟件開發中,通常使用的數據庫為SQLite。目前較常使用的版本為 SQLite 3。
SQLite是一款輕型的數據庫,其設計是針對嵌入式設備的[11]。它占用的資源非常少, 只有幾百KB的內存,支持Windows/Linux/Unix等等許多主流的操作系統。SQLite的第 一個版本誕生于 2000年 5月。
SQLite具有如下的優勢:
(1)輕量級:SQLite是進程水平的數據庫引擎,因此不存在數據庫的服務器和客戶 端的區分。
(2)獨立性:SQLite的核心引擎不需要第三方軟件,不需要“安裝”,部署起來十分 方便。
(3)隔離性:SQLite數據庫的所有信息都位于一個相對獨立的文件夾中,SQLite的 運行及維護較為方便。
(4)跨平臺:SQLite可以支持多種操作系統,包括 Windows> Windows Mobile> Android> Symbian等多種PC及移動設備的操作系統。
(5)多語言接口: SQLite數據庫支持很多語言的編程接口,包括C/C++、Java、Ruby、 Perl、Python 等等。
(6)安全性:SQLite通過數據庫級別的獨占性和共享鎖技術來實現事務的獨立處理。 在 SQLite 中,多個進程可以在同一時間內讀取某項數據,然而對于寫數據而言,只有 一個進程可以再一個時間內寫數據。在進程或線程向數據庫執行寫操作前,要首先獲得 對數據的獨占鎖定。獨占鎖定后,其他進程或線程對該項數據的操作不會發生[12]。
2.6 Android程序中的界面設計技術
用戶界面設計是 Android 應用程序開發的重要部分。在 Android 應用程序開發中, 使用XML文件進行界面布局是常用的方法。這樣做的好處是將用于業務控制的Java代 碼和界面布局XML代碼分離開來,從而使程序的結構更加清晰,層次更加分明。
使用XML布局文件中配置XML布局文件主要通過下面兩個步驟:
(1)在Android應用程序的res/layout目錄下編寫XML布局文件,其命名規則要遵 守Java程序命名規則。創建后,R.java文件會自動引用該布局資源。
(2)在相關的Activity中使用方法setContentView()來顯示XML文件中布局的具體內 容。
在 Android 組件開發中,每個組件在窗體中都有各自的大小、位置。使用 Android 的布局管理器可以方便地對每個組件的布局進行管理。Android平臺提供了了五種布局 管理器,分別是線性布局管理器(LinearLayout)、表格布局管理器(TableLayout)、幀布 局管理器(FrameLayout)、相對布局管理器(RelativeLayout),以及絕對布局管理器 (AbsoluteLayout)。其中,絕對布局管理器自Android 2.0后標記為過期。
(1)線性布局
線性布局,就是以水平或者垂直的方式來布局。在垂直排列方式中,每一行只安排 一個組件;在唉水平排列方式中,每一列只安排一個組件。Android的線性布局不進行 自動換行。當組件的位置超過了窗口的大小,會被自動隱藏。在Android的XML布局 文件中,使用< LinearLayout >標記進行線性布局定義。
線性布局的一些重要屬性如下:
Orientation屬性:這是排列的方式。Orientation的值有兩個,horizontal代表水平布 局,vertical代表垂直布局。在默認情況下,系統使用vertical,即垂直布局。
Gravity屬性:設置布局管理器內各個組件的對齊方式。其值包括top、bottom> left、 right、center_horizontal、center_vertical、fill_vertical、fill_horizontal、center> fill 等等。 這些屬性也可以組合搭配使用,屬性之間用豎線隔開,如top|left。
Layout_id屬性:為當前的組件指定一個id屬性。這樣,在Java代碼中就可以引用 該組件了。在指定id 后, R.java中會自動生成相應的屬性。Java代碼中的findViewById() 方法用來獲取該組件。
background屬性:設置組件的背景。這個背景可以是顏色,也可以是圖片。在指定 顏色時,使用的是系統的顏色值,如白色背景是#FFFFFFFF,黑色背景是#00000000。 在指定圖片背景,使用@ drawable/...進行指定相應的圖片。當然,要提前將背景圖片保 存在res文件夾下的drawable的文件夾中。
Layout_height 屬性:設置組件的高度。其值包括 fill_parent、wrap_content。fill_parent 表示該組件與其父組件的高度相同;wrap_content表示該組件高度恰好容納其自身的內 容。除此之外,可以對組件的高度設置具體的數值,單位是dp。
Layout_weight 屬性:設置組件的寬度。其值包括 fill_parent、wrap_content。fill_parent 表示該組件與其父組件的寬度相同;wrap_content表示該組件寬度恰好容納其自身的內 容。除此之外,可以對組件的寬度設置具體的數值,單位是dp。
(2)表格布局
表格布局,就是以行、列的方式來對組件進行布置。表格布局使用<TableLayout> 標記定義,對于每一行,都以<TableRow>來進行標記。<TableRow>也是一個布局容器, 因此可以安放多個組件。每增加一個組件,就相當于表格增添一列。使用表格布局,可 以伸展或者隱藏列。<TableLayout>同時繼承了<LinearLayout>布局的所有屬性。
(3)相對布局 相對布局,就是依組件間的相對位置進行布局。例如,某組件在另一個組件的右邊、
下邊等等。在XML布局文件中,使用標記<RelativeLayout>定義相對布局。
(4)幀布局 幀布局管理器,顧名思義,以幀為單位。也就是說,每加入一個組件,就創建一個
空區域,即為一幀。默認情況下,這些組件從窗口的左上角開始布局,層疊排列,后設 置的組件覆蓋住前面的組件。
在 Android 平臺的應用程序開發中,使用 XML 布局文件定義幀布局的方法是使用 <FrameLayout > 標記。
第3章 農業信息化平臺數據采集系統需求規格
3.1軟件及硬件應用環境
手機:智能手機
處理器:600MHz
內存:512MB
操作系統:Android系統。最低為Android 2.1,推薦為Android 2.3.3。
數據庫:SQLite。
3.2軟件功能規格及用例驗證
本系統的用戶角色只有一個,即業務員。用戶使用本手機系統,對農業生產的相關 數據信息在手機端進行采集。業務包括:數據錄入、數據查詢和數據更新。具體包括農 戶管理、地塊管理、隔離區管理及用戶管理。此外,業務員需要完成的業務還有系統的 登錄驗證。
使用本系統的角色只有一種用戶,即業務員。
本軟件系統的用例包括:農戶管理、地塊管理、隔離區管理和用戶管理。上述的功 能都需要用戶在登錄系統后才能夠進行操作。每個用例下面又包含若干個子用例。本軟 件系統的子用例如下:
農戶管理:村信息管理、農戶檔案管理。
地塊管理:地塊檔案管理、地塊制種管理。 隔離區管理:隔離區檔案管理、隔離區栽培管理。
用戶管理:修改密碼。
系統的用例圖如圖 3.1 所示。
3.2.3 用例1:登錄驗證
用例名稱:登錄驗證。
用例執行者:業務員。
前置條件:用戶未登錄。 后置條件:用戶進入系統主界面。
基本路徑:
1.用戶進入登錄界面,輸入用戶名和密碼。
2.用戶點擊“登錄”按鈕。
3.系統驗證用戶名和密碼。
4.通過驗證后,系統跳轉至主界面,用戶進入了系統中。
本用例終結。
備選路徑:
(2B)用戶點擊“退出”按鈕,軟件系統關閉。用例結束。
(4B)未通過驗證,系統提示用戶名或者密碼錯誤,已填入的數據清空。返回到步驟
1。
圖 3.2為用例“登錄驗證”的活動圖。
database
3.2.4 用例2:農戶管理
用例名稱:農戶管理。
用例執行者:業務員。
前置條件:用戶進入農戶管理界面。
后置條件:用戶完成農戶管理數據處理。
基本路徑:
1.用戶進入農戶管理界面。
2.用戶點擊“農戶檔案”按鈕。
3.用戶輸入或選擇要處理的數據。
4.系統對數據進行有效性驗證。
5.通過驗證后,系統完成數據處理。
6.返回到農戶管理子界面。
本用例終結。
備選路徑:
(2B)用戶點擊“村信息管理”按鈕,進入村信息管理界面,進入步驟3o
(2C)用戶點擊“返回按鈕”,返回主界面。用例結束。
(4B)未通過驗證,系統提示用戶錯誤信息,清空用戶的輸入(或重置),返回到步驟3。 圖 3.3 為用例“農戶管理”的活動圖。
圖3.3 農戶管理活動圖
3.2.5 用例3:地塊管理
用例名稱:地塊管理。
用例執行者:業務員。
前置條件:用戶進入地塊管理界面。
后置條件:用戶完成地塊管理數據處理。
基本路徑:
1.用戶進入地塊管理界面。
2.用戶點擊“地塊檔案”按鈕。
3.用戶輸入或選擇要處理的數據。
4.系統對數據進行有效性驗證。
5.通過驗證后,系統完成數據處理。
6.返回到地塊管理子界面。
本用例終結。
備選路徑:
(2B)用戶點擊“地塊制種管理”按鈕,進入地塊制種管理界面,進入步驟3。 (2C)用戶點擊“返回按鈕”,返回主界面。用例結束。
(4B)未通過驗證,系統提示用戶錯誤信息,清空用戶的輸入(或重置),返回到步驟3o 圖 3.4 為用例“地塊管理”的活動圖。
3.2.6 用例4:隔離區管理
用例名稱:隔離區管理。
用例執行者:業務員。
前置條件:用戶進入隔離管理界面。 后置條件:用戶完成隔離管理數據處理。
基本路徑:
1.用戶進入隔離管理界面。
2.用戶點擊“隔離區檔案”按鈕。
3.用戶輸入或選擇要處理的數據。
4.系統對數據進行有效性驗證。
5.通過驗證后,系統完成數據處理。
6.返回到隔離區管理子界面。
本用例終結。
備選路徑:
(2B)用戶點擊“隔離區栽培管理”按鈕,進入隔離區栽培管理界面,進入步驟3o
(2C)用戶點擊“返回按鈕”,返回主界面。用例結束。
(4B)未通過驗證,系統提示用戶錯誤信息,清空用戶的輸入(或重置),返回到步驟3。 圖 3.5 為用例“隔離區管理”的活動圖。
3.3性能需求
農業信息化平臺數據采集系統是一款基于智能手機的軟件系統,對手機端的界面有 著較高要求:有自定義輸入面板,實現快速數據錄入;界面要美觀,而且方便用戶在生 產環境中使用;數據錄入時要隱藏不必要信息,精簡輸入的數據項;設計各模塊間良好 的導航,支持各頁面間的快速有序跳轉;界面應提供相應的操作提示。
由于手機的內存容量有限,因此軟件系統應盡量減小軟件的占據空間,避免圖片等 資源過多而占據大量的手機內存空間。
由于手機硬件水平比不上 PC 機,因此系統應快速響應,確保高效快速,避免長時 間忙等。
采用分層次、分模塊的設計及實現,以適應將來功能擴展的需求。
軟件系統要提供必要的錯誤信息提示,避免程序直接出錯退出。
第4章 農業信息化平臺數據采集系統總體設計
4.1面向功能分解的軟件結構圖
本系統實現的是農業信息化平臺的智能手機數據采集。業務員在登錄系統后使用智 能手機進行數據信息的采集。系統共分為四個模塊,分別是:農戶管理模塊、地塊管理 模塊、隔離區管理模塊、用戶管理模塊。其中,農戶管理模塊包括村信息管理和農戶檔 案管理模塊,地塊管理模塊包括地塊檔案管理模塊和地塊制種模塊,隔離區管理包括隔 離區檔案管理模塊和隔離區栽培管理模塊。本系統實現了農業信息化平臺基礎數據的手 機版管理和維護。
圖 4.1 為農業信息化平臺數據采集系統的組成結構圖。
4.2三層架構的設計
在Table層中,共設計了 7個實體類,分別為:DK_Field、DK_Fieldzhong、 NH_Country、NH_Farmer、GL_Barrier、GL_Barriergrow 和 user。每個類均為 final 類型。 實體類的每個屬性即為對應的數據表的表明或字段名稱[16]。為方便在 Data 層的調用, 屬性設置為public final static類型。每個實體類都有對應數據表操作的方法。為方便Data 層使用,這些方法也設置為public final static類型。此外,為了代碼和數據的安全性, 特別建立一個私有構造的方法private xxx(){}(其中,xxx即代表該實體類)。圖4.2為
user.java
圖4.2 Table層組件圖
在Data層中,設計本軟件系統所需的數據庫rice_db。這里,借用Android中的數 據庫幫助類SQLiteOpenHelper。該類提供了自動生成、更新、讀寫數據庫的機制。本軟 件在實現時,建立類 DBOpenHelper, DBOpenHelper 繼承了基類 SQLiteOpenHelper。需 要重寫以下幾個方法:
(1)構造函數DBOpenHelper(Context context):這里建立數據庫的名稱和版本。
(2)onCreate ():這個方法用于第一次實例化數據庫對象,創建數據庫。本軟件系統 中,在此建立所需的數據表,初始化一些基本的數值[17]。
(3)onUpgrade ():這個方法用戶版本信息變化時更新數據庫。
此外,DBOpenHelper還需要一些方法,以實現對每張表進行插入、查找、刪除、 更新等操作。這些方法均為public類型。
在本軟件系統中,DBOpenHelper實現的方法如表4.1所示。
表4.1 DBOpenHelper實現方法
方法名 相關數據表 功能 調用的Activity
DBOpenHelper() 無 構造函數 所有 Activity
OnCreate() 所有 創建數據表 在第一次使用程序時
OnUpgrade() 所有 更新數據庫 更新數據庫時
InsertDK_Field() DK_Field 添加數據 DK_FieldAddActivity
DeleteDK_Field() DK_Field 刪除數據 DK_FieldDetailActivity
UpdateDK_Field() DK_Field 更新數據 DK_FieldUpdateActivity
InsertDK_Fieldzhong() DK_Fieldzhong 添加數據 DK_FieldzhongAddActivity
DeleteDK_Fieldzhong() DK_Fieldzhong 刪除數據 DK_FieldzhongDetailActivity
UpdateDK_Fieldzhong() DK_Fieldzhong 更新數據 DK_FieldzhongUpdateActivity
InsertNH_Country() NH_Country 添加數據 NH_CountryAddActivity
DeleteNH_Country() NH_Country 刪除數據 NH_CountryDetailActivity
UpdateNH_Country() NH_Country 更新數據 NH_CoutnryUpdateActivity
InsertNH_Farmer() NH_Farmer 添加數據 NH_FarmerAddActivity
DeleteNH_Farmer () NH_Farmer 刪除數據 NH_FarmerDetailActivity
UpdateNH_Farmer () InsertGL_Barrier() NH_Farmer GL_Barrier 更新數據 添加數據 NH_FarmerUpdateActivity
GL_BarrierAddActivity
DeleteGL Barrier() GL Barrier 刪除數據 GL BarrierDetailActivity
UpdateGL_Barrier() GL_Barrier 更新數據 GL_BarrierUpdateActivity
InsertGL_BarrierG() GL_Barriergrow 添加數據 GL_BarrierGAddActivity
DeleteGL_BarrieG() GL_Barriergrow 刪除數據 GL_BarrierGDetailActivity
UpdateGL_BarrierG()
InsertUser() GL_Barriergrow usertable 更新數據 添加數據 GL_BarrierGUpdateActivity
UserActivity
DeleteUser () usertable 刪除數據 UserDetailActivity
Updatepwd() usertable 更改密碼 UserUpdateActivity
根據概要設計,數據庫中每張表對應一個數據庫適配器,給每個適配器映射相應的 java類。Adapter的設計方案如下:
(1)表Table的適配器為RAdapter.java,此Java類是BaseAdapter的繼承。類中含 有私有屬性IDS和DATES,即數據的編號和數據錄入的時間,其類型為List<String>。
(2)表中有一個構造函數TAdapter(),該方法為公有。
(3)需要實現基類的方法getCount(),getItem(),getItemId(),獲取適配器的ID號及其 內容。
(4)需要實現基類方法getView(),此方法的功能是將對應的數據以表格的形式顯示 在界面中[18]。
實現適配器的關鍵代碼如下:
public class RAdapter extends BaseAdapter
{
public RAdapter(Context context,List<String> IDS ,List<String> DATES) {
this.IDS=IDS; this.DATES = DATES;
} public int getCount() {}
public Object getItem() {}
public long getItemId() {} public View getView() {}
}
圖4.3為適配器Adapter的組件圖。
NHAdapt I~I~| DKAdapt
_I_ er.java
1 _I_ er.java
1
I~1—| GLAdapt I~I—, UserAda
._l_. er.java
L ._J pter.java
1
圖4.3 Adapter組件圖
4.3Activity設計與實現
Activity是Android應用程序與用戶交互的窗口。根據上述的概要設計,在view層 中一共設計28個Activity。每個Activity對應一個Java類。
一個viewActivity類是Android中基類Activity的繼承。viewActivity的實現方案如 下:
(1)設置界面的控件。
private EditText viewA; private Button viewB;
(2)設置Activity對應的XML: setContentView(R.layout.V);
(3)將Activity中的控件與XML中對應的控件綁定[19]: viewA=(EditText)this.findViewById(R.id.A); viewB=(Button)this.findViewById(R.id.B);
(4)設置每個控件的動作事件: viewA.setOnClickListener(new OnClickListener){
Public void onClick(View v0)
{ //此處為單擊此控件時相應的事件 }
}
viewB.setOnClickListener(new OnClickListener){
Public void onClick(View v1)
{ //此處為單擊此控件時相應的事件
}
}……
在農業信息化平臺農戶管理模塊中,table層程序有兩個數據表,即NH_Country.java、 NH_Farmer.java。為數據表提供操作方法的是data層的DBOpenHelper.java,提供數據庫 適配器的是Adapter層的NHAdapter.java。這個模塊共有9個頁面。
農戶管理頁面NonghuActivity.java,這個頁面通向兩個子頁面,即村信息管理頁面 NH_CountryActivity.java 和農戶檔案管理頁面 NH_FarmerActivity.java。
村信息管理頁面NH_CountryActivity.java依賴數據庫適配器NHAdapter.java,它通 向三個子頁面:村信息添加頁面NH_CountryAddActivity.java,村信息詳情瀏覽界面 NH_CountryDetailActivity.java,村信息更新界面 NH_CountryUpdateActivity.java。三個子
界面依賴data層的數據操作業務DBOpenHelper.java。
農戶檔案管理頁面NH_FarmerActivity.java依賴數據庫適配器NHAdapter.java,它通 向三個子頁面:農戶檔案添加頁面NH_FarmerAddActivity.java,農戶檔案詳情瀏覽界面 NH_FarmerDetailActivity.java,農戶檔案更新界面 NH_FarmerUpdateActivity.java。三個 子界面依賴data層的數據操作業務DBOpenHelper.java。圖4.4為農戶管理模塊的組件 圖。
圖4.4 農戶管理模塊組件圖
在農業信息化平臺地塊管理模塊中,table層程序有兩個數據表,即DK_Field.java、 DK_Fieldzhong.java。為數據表提供操作方法的是data層的DBOpenHelper.java,提供數 據庫適配器的是Adapter層的DKAdapter.java。這個模塊共有9個頁面。
地塊管理頁面DikuaiActivity.java,這個頁面通向兩個子頁面,即地塊檔案管理頁面 DK_FieldActivity.java 和地塊制種管理頁面 DK_FieldzhongActivity.java。
地塊檔案管理頁面DK_FieldActivity.java依賴數據庫適配器DKAdapter.java,它通 向三個子頁面:地塊檔案添加頁面DK_FieldAddActivity.java,地塊檔案詳情瀏覽界面 DK_FieldDetailActivity.java,地塊檔案更新界面 DK_FieldUpdateActivity.java。三個子界 面依賴data層的數據操作業務DBOpenHelper.javao
地塊制種管理頁面DK_FieldzhongActivity.java依賴數據庫適配器DKAdapter.java, 它通向三個子頁面:地塊制種添加頁面DK_FieldzhongAddActivity.java,地塊制種詳情 瀏覽界面 DK_FieldzhongDetailActivity.java , 地塊制種更新界面 DK_FieldzhongUpdateActivity.java。三個子界面依賴 data層的數據操作業務 DBOpenHelper.javao圖4.5為地塊管理模塊的組件圖。
廠丄一i DK_Fieldz
hon g.java
圖4.5 地塊管理模塊組件圖
在農業信息化平臺的隔離區管理模塊中,table層的程序文件包括兩個數據表,分別 是GL_Barrier.java、GL_Barriergrow.java。為這兩個數據表提供操作方法的是data層的 DBOpenHelper.java,提供數據庫適配器的是Adapter層的GLAdapter.java。這個模塊共 有 9個頁面。
隔離區管理頁面GeliActivity.java,這個頁面通向兩個子頁面,即隔離區檔案管理頁 面 GL_BarrierActivity.java 和隔離區栽培管理頁面 GL_BarriergrowActivity.java。
隔離區檔案管理有三個子界面,都依賴data層的數據操作業務DBOpenHelper.java。 隔離區檔案管理頁面GL_BarrierActivity.java依賴數據庫適配器GLAdapter.java,它通向 隔離區檔案管理的三個子頁面:隔離區檔案添加頁面GL_BarrierAddActivity.java,隔離 區檔案詳細信息的瀏覽界面GL_BarrierDetailActivity.java,以及隔離區檔案更新界面 GL_BarrierUpdateActivity.java。
隔離區栽培管理頁面 GL_BarriergrowActivity.java依賴數據庫適配器 GLAdapter.java,它通向三個子頁面:隔離區栽培添加頁面GL_BarrierGAddActivity.java, 隔離區栽培詳情瀏覽界面 GL_BarrierGDetailActivity.java ,隔離區栽培更新界面 GL_BarrierGUpdateActivity.java。三個子界面依賴 data層的數據操作業務 DBOpenHelper.java。圖4.6為隔離區管理模塊的組件圖。
圖4.6 隔離區管理模塊組件圖
在農業信息化平臺用戶管理模塊中,table層程序為user.java,即一個數據表。為數 據表提供操作方法的是data層的DBOpenHelper.java,提供數據庫適配器的是Adapter 層的UserAdapter.java。這個模塊共有4個頁面。
用戶管理頁面UserActivity.java依賴數據庫適配器UserAdapter.java,它通向三個子 頁面:用戶添加頁面UserAddActivity.java,用戶詳情瀏覽界面UserDetailActivity.java, 密碼更新界面UserUpdateActivity.java。三個子界面依賴data層的數據操作業務
DBOpenHelper.java。圖4.7為用戶管理模塊的組件圖。
圖4.7 用戶管理模塊組件圖
4.4系統總體結構
根據Android架構的特點和本系統的功能,在發開過程中把本系統分為四個層次。
(1)XML:在Android開發中,使用/res/layout/中的.xml文件對界面進行設計、控件 布局、控件屬性設置。另外,可以使用/res/layout/中的.xml文件來自定義某種控件的樣 式[13]。使用/AndroidManifest.xml設置使用的Android API的版本信息,進行每個Activity 的聲明,以及申請要使用的用戶資源。使用/res/layout/values/中的strings.xml來聲明程 序中使用的中文單詞。使用/res/layout/values/中的arrays.xml來設置每個下拉列表項的元 素。
(2) View:這一層為人機交互的界面。View包括本軟件系統所需要的全部Activity- 用戶在Activity上輸入數據、選中數據項,點擊按鈕,并得到相應的反饋。
⑶Data與Adapter :這一層為數據庫及數據庫適配器。建立一個數據庫,即農業 生產信息數據庫,本層包括數據庫建立、更新及各類操作的方法。Adapter中包含部分 Activity為顯示的數據庫信息而使用的所有適配器Adapter□適合在ListView控件顯示數 據表中多條記錄時使用。
(4)Table :這一層為數據表層。在本項目中,把所需的數據表的字段名及類型保存 在Entity層中,本層變化基本不會引起Data層的變化,適合于分層開發。
本系統的體系結構如圖 4.8 所示。
圖4.8 軟件系統體系結構
根據以上所述軟件體系結構,在設計時把系統分為5個包,依次為: XML、 View、 Adapter、Data、Table。包之間的依賴關系是從上至下的[14]。即:XML包依賴于view 包;view包依賴于data包和adapter包;data包依賴于table包。圖4.9為軟件系統的包 圖。
圖4.9 軟件系統包圖
4.5數據模型設計
4.5.1 概念模型
在農業信息化平臺數據采集系統中,涉及到的實體概念包括村、田地、農民、隔離 區和農作物。系統的E-R圖如圖4.10所示。
圖4.10數據模型E-R圖
4.5.2 數據表
根據農業信息化平臺數據采集系統的實際需要,本系統包括一個數據庫,設計使用 11張表:村信息表NH_Country,農戶檔案表NH_Farmer,地塊檔案表DK_Field,地塊 制種表DK_Fieldzhong,隔離區檔案表GL_Barrier,隔離區栽培表GL_Barriergrow,用 戶表User。表4.2至表4.8為農業信息化平臺數據采集系統的數據表設計。
表4.2 NH_Country :村信息表
字段名 字段含義 類型 關鍵字
ID 編號 Int PK
CountryName 村名稱 Varchar
TownName 縣名稱 Varchar
GroupNum 組數 Int
NoteDate 創建時間 Datetime
LastModified 上次修改時間 Datetime
表4.3 NH_Farmer :農戶檔案表
字段名 字段含義 類型 關鍵字
ID 編號 Int PK
CountryName 村名稱 Varchar FK
FarmerName 姓名 Varchar
TelNumber 電話號碼 Varchar
GroupID 組代號 Varchar
FarmerID 農戶編號 Varchar
NoteDate 創建時間 Datetime
LastModified 上次修改時間 Datetime
表4.4 DK_Field:地塊檔案表
字段名 字段含義 類型 關鍵字
ID 編號 Int PK
FarmerCode 農戶編號 Varchar FK
Area 地塊面積 Float
FieldType 地塊類型 Varchar FK
FieldCode 地塊編號 Varchar
Year 年度 Int
NoteDate 創建時間 Datetime
LastModified 上次修改時間 Datetime
表4.5 DK_Fieldzhong:地塊制種表
字段名 字段含義 類型 關鍵字
ID 編號 Int PK
FieldReID 關聯編號 Int FK
Area 制種面積 Float
FemaleParentNum 母本數量 Int
MaleParentNum 父本數量 Int
ProvideNum 交種數量 Int
Year 年度 Int
Note 備注 Varchar
NoteDate 創建時間 Datetime
LastModified 上次修改時間 Datetime
表4.6 GL_Barrier :隔離區檔案表
字段名 字段含義 類型 關鍵字
ID 編號 Int PK
CountryName 村名稱 Varchar FK
TerrianType 地塊類型 Varchar FK
FarmType 耕作類型 Varchar FK
DiseaseType 主要病害 Varchar FK
InsectType 主要蟲害 Varchar FK
BarrierType 隔離方式 Varchar FK
NoteDate 創建時間 Datetime
LastModified 上次修改時間 Datetime
表4.7 GL_Barriergrow:隔離區栽培表
字段名 字段含義 類型 關鍵字
ID 編號 Int PK
BarrierReID 隔離關聯編號 Varchar FK
FieldType 田塊類型 Varchar FK
StartTime 始穗期 Datetime
TotalEarthNum 總穗數 Int
TotalGrainNum 穗總粒數 Int
ActGrainNum 穗實粒數 Int
ActGrainRate 結實率 Float
TestTime 考種時間 Datetime
NoteDate 創建時間 Datetime
LastModified 上次修改時間 Datetime
表4.8 User:用戶表
字段名 字段含義 類型 關鍵字
Username 用戶名 Varchar
Userpwd 密碼 Varchar
4.6接口設計
4.6.1 人機交互接口設計
用戶不能夠直接訪問數據,應該是通過Activity與系統進行交互[15]。Activity是人 機交互的接口,每一個Activity代表一個窗口,可以視為用戶的界面。因此,將Activity 類設置為邊界類。
根據用戶操作流程。首先進入的是登錄界面LoginActivity,登錄通過后進入系統的 主界面MainActivity。用戶通過點擊主界面中的按鈕,進入不同的子模塊界面。四個子 模塊分別有界面:農戶管理界面NonghuActivity、地塊管理界面DikuaiActivity、隔離區
管理界面GeliActivity、用戶管理界面UserActivity。圖4.11為農業信息化平臺數據采集 系統的人機交互接口類圖。
NHAdapter()
圖4.11 人機交互接口類圖
而每個子模塊下面,也有各自的操作界面。
(1)農戶管理:農戶管理界面NonghuActivity,包含兩個子界面:村信息管理界面 NH_CountryActivity和農戶檔案管理界面NH_FarmerActivity。村信息管理界面包括村信 息添加界面 NH_CountryAddActivity、村信息詳情界面 NH_CountryDetailActivity、村信 息更新界面NH_CountryUpdateActivity。農戶檔案管理界面包括農戶檔案添加界面 NH_FarmerAddActivity、農戶檔案詳情界面NH_FarmerDetailActivity、農戶檔案更新界 面NH_FarmerUpdateActivity。圖4.12為農業信息化平臺數據采集系統農戶管理模塊界 面的類圖。
圖4.12 農戶管理界面類圖
(2)地塊管理:地塊管理模塊包含一個主界面,即地塊管理界面DikuaiActivity。此 外,該模塊還兩個子模塊:地塊檔案管理界面 DK_FieldActivity 和地塊制種管理界面 DK_FieldzhongActivity 。地塊檔案管理界面包括地塊檔案添加界面 DK_FieldAddActivity、地塊檔案詳情界面DK_FieldDetailActivity、地塊檔案更新界面 DK_FieldUpdateActivity 。地塊制種管理界面包括地塊制種添加界面 DK_FieldzhongAddActivity、地塊制種詳情界面 DK_FieldzhongDetailActivity、地塊制種 更新界面 DK_FieldzhongUpdateActivity。
(3)隔離區管理:隔離區管理模塊有一個主界面,即隔離區管理界面 GeliActivity。 此外,隔離區管理模塊還有兩個子界面:隔離區檔案管理界面 GL_BarrierActivity 和隔 離區栽培管理界面GL_BarriergrowActivity。隔離區檔案管理界面包括隔離區檔案添加界 面 GL_BarrierAddActivity、隔離區檔案詳情界面 GL_BarrierDetailActivity、隔離區檔案 更新界面GL_BarrierUpdateActivity。隔離區栽培管理界面包括隔離區栽培添加界面 GL_BarrierGAddActivity、隔離區栽培詳情界面 GL_BarrierGDetailActivity、隔離區栽培 更新界面 GL_BarrierGUpdateActivity。
(4)用戶管理:用戶管理管理模塊包含四個界面,分別是:用戶管理界面 UserActivity, 用戶添加界面UserAddActivity、用戶詳情界面UserDetailActivity、密碼更新界面 UserUpdateActivity。
4.6.2 業務控制接口設計
在本系統中,部分邊界類需要調用數據庫適配器adaptero因此,Adapter需要向 Activity提供業務控制的接口。
具體的設計如下:所有的 Adapter 都是由基類 BaseAdapter 繼承。系統中每個模塊 都需要設置一個Adapter,農戶管理模塊NHAdapter,地塊管理模塊DKAdapter,隔離 區管理模塊GLAdapter,用戶管理模塊UserAdapter。這些都是BaseAdapter的繼承。每 一個 Adapter 都向上層 Activity 提供一個接口。上層在運行時調用這些接口。其中,農 戶管理模塊的 NH_CountryActivity 和 NH_FarmerActivity 需要調用接口 nhInterface。地 塊管理模塊的 DK_FieldActivity 和 DK_FieldzhongActivity 需要調用接口 dkInterface。隔 離區管理模塊的 GL_BarrierActivity 和 GL_BarriergrowActivity 需要調用接口 gllnterface。 用戶管理模塊的UserActivity需要調用接口 userInterface。圖4.13為農業信息化平臺數 據采集系統的接口及其實現類的類圖。
o
BaseAdapter
(from adapter)
GLAdapter
(from adapter)
▽
NHAdapter
(from adapter)
nhInterfac e
IDS : List<String> ② DATES : List<String..
NH_FarmerActiviNtyH_CountryActivity
(from Nonghu) (from Nonghu)
*SetO nClickList旅etO nClickListe ner...
:getCount()
»getItem()
JgetItemld()
;getView()
NHAdapter()
UserAdapter
(from adapter)
宅 IDS : List<String...
:"UserAdapter()
userInterfa
UserActivity
(from User)
IDS : List<String>
② DATES : List<String.. O
glI nterface
EGLAdapter()
DKAdapter
(from adapter)
GL_BarrierActivity (from Geli)
IDS : List<String>
◎DATES :List<String\ .SetcnClickListener
DKAdapterO
dkInterfac 叭 e
A
GL_BarriergrowActivity
(from Geli)
「Set On ClickListe ner...
DK_FieldActivity
DK_FieldzhongActivity (from Dikuai)
(from Dikuai)
Set On ClickListe ner...
:SetOnClickListener..KSetOnClickListene,...
圖4.13 接口及其實現類圖
第5章 農業信息化平臺數據采集系統的詳細設計與實現
5.1模塊的詳細設計與界面的具體實現
5.1.1 模塊的詳細設計
在登錄模塊中,用戶進入登錄頁面LoginActivity,輸入用戶名和密碼,點擊“登錄” 按鈕。此時系統的業務層 DBOpenHelper 將用戶名和密碼進行驗證,如果驗證成功,則 返回一個登錄成功的提示消息,用戶轉入到主界面MainActivity;否則,提示失敗的消 息。
在這個過程中,與用戶直接交互的是界面 LoginActivity ,而提交的數據由 LoginActivity送至業務層DBOpenHelper,DBOpenHelper再根據相應的查詢方法向數據 庫的用戶表中進行查詢。DBOpenHelper屬于控制類,負責業務處理。user是實體類, 代表的是數據表usertable。圖5.1為用戶登錄的時序圖。
3: user( )
6: SetOnClickListener( )
圖5.1 用戶登錄時序圖
村信息管理包括村信息記錄的數據添加、刪除和更新。
進行村信息記錄添加,用戶首先進入的是邊界類的村信息管理頁面,點擊頁面下方 的“添加”按鈕,進入村信息添加頁面。輸入添加的信息后,邊界類將數據送到控制類 的DBOpenHelper,進行數據添加。控制類進行數據表的數據添加操作后,返回給邊界 類。當添加成功后,頁面由村信息添加頁面返回到村信息管理頁面,此時村信息添加頁 面結束。圖 5.2 為村信息記錄添加時序圖。
::Set On ClickListe ner(|) I
3 : InsertNH Country( )
5: DBOpe nHelper(Context context)
圖5.2 村信息記錄添加時序圖
農戶檔案管理包括農戶檔案記錄的數據添加、刪除和更新。
進行農戶檔案記錄刪除,用戶首先進入的是邊界類的農戶檔案管理頁面,點擊頁面 中某條要刪除的記錄,進入農戶檔案記錄瀏覽頁面。確定刪除信息后,點擊“刪除”按 鈕,邊界類將數據送到控制類的DBOpenHelper,進行數據刪除。控制類進行數據表的 數據刪除操作后,返回給邊界類。當刪除成功后,頁面由農戶檔案記錄瀏覽頁面返回到 農戶檔案管理頁面,此時農戶檔案記錄瀏覽頁面結束。圖 5.3 為農戶檔案記錄刪除時序 圖。
4: delete( )
5: DBOpenHelper(Context context)
圖5.3 農戶檔案記錄刪除時序圖
地塊檔案管理包括地塊檔案記錄的數據添加、刪除和更新。
進行地塊檔案記錄更新,用戶首先進入的是邊界類的地塊檔案管理頁面,點擊頁面 中某條要更新的記錄,進入地塊檔案記錄瀏覽頁面。確定更新信息后,點擊“更新”按 鈕,進入到地塊檔案記錄更新界面。此時,地塊檔案記錄瀏覽界面生存周期結束。對該 項數據更新后,點擊“更新”按鈕,邊界類將數據送到控制類的DBOpenHelper,進行 數據更新。控制類進行數據表的數據更新操作后,返回給邊界類。當更新成功后,頁面
由地塊檔案記錄瀏覽頁面返回到地塊檔案管理頁面,此時地塊檔案記錄更新頁面結束。 圖 5.4 為地塊檔案記錄更新時序圖。
1: SetO nClickListe ne|「()
2: SetO nClickListene「( ) T
| 13: SetOnClickListene「( ) |
4: UpdateDK Field()
| 5: update ()
圖5.4 地塊檔案記錄更新時序圖
地塊制種管理包括地塊制種記錄的數據添加、刪除和更新。
進行地塊制種記錄添加,用戶首先進入的是邊界類的地塊制種管理頁面,點擊地塊 制種的用戶管理頁面種的“添加”按鈕,程序跳轉至地塊制種添加頁面。在地塊制種輸 入界面,輸入或者在下拉菜單中添加的信息后,邊界類將數據送到控制類的
DBOpenHelper,進行數據添加。控制類進行數據表的數據添加操作后,返回給邊界類。 當添加成功后,頁面由地塊制種添加頁面返回到地塊制種管理頁面,此時地塊制種添加
頁面結束。圖 5.5 為地塊制種記錄添加時序圖。
I 2: SetOnClickListener( ) | I
:In sertDK Fieldzho ng()
4: inse「t( )
5: DBOpenHelper(Context context)
圖5.5 地塊制種記錄添加時序圖
隔離區檔案管理包括隔離區檔案記錄的數據添加、刪除和更新。
進行隔離區檔案記錄刪除,用戶首先進入的是邊界類的隔離區檔案管理頁面,點擊 頁面中某條要刪除的記錄,進入隔離區檔案記錄瀏覽頁面。確定刪除信息后,點擊“刪 除”按鈕,邊界類將數據送到控制類的DBOpenHelper,進行數據刪除。控制類進行數 據表的數據刪除操作后,返回給邊界類。當刪除成功后,頁面由隔離區檔案記錄瀏覽頁 面返回到隔離區檔案管理頁面,此時隔離區檔案記錄瀏覽頁面結束。圖 5.6 為隔離區檔 案記錄刪除時序圖。
圖5.6 隔離區檔案記錄刪除時序圖
隔離區栽培管理包括隔離區栽培記錄的數據添加、刪除和更新。
進行隔離區栽培記錄更新,用戶首先進入的是邊界類的隔離區栽培管理頁面,點擊 頁面中某條要更新的記錄,進入隔離區栽培記錄瀏覽頁面。確定更新信息后,點擊“更 新”按鈕,進入到隔離區栽培記錄更新界面。此時,隔離區栽培記錄瀏覽界面生存周期 結束。對該項數據更新后,點擊“更新”按鈕,邊界類將數據送到控制類的 DBOpenHelper, 進行數據更新。控制類進行數據表的數據更新操作后,返回給邊界類。當更新成功后, 頁面由隔離區栽培記錄瀏覽頁面返回到隔離區栽培管理頁面,此時隔離區栽培記錄更新 頁面結束。圖 4.20 為隔離區栽培記錄更新時序圖。
一 火
圖4.20 隔離區栽培記錄更新時序圖
用戶模塊是負責用戶管理各項數據的統計。本程序實現的是用戶數據管理。 用戶管理包括用戶記錄的數據添加、刪除和更新。
進行用戶記錄添加,用戶首先進入的是邊界類的用戶管理頁面,點擊頁面下方的“添 加”按鈕,進入用戶添加頁面。輸入添加的信息后,邊界類將數據送到控制類的 DBOpenHelper,進行數據添加。控制類進行數據表的數據添加操作后,返回給邊界類。 當添加成功后,頁面由用戶添加頁面返回到用戶管理頁面,此時用戶添加頁面結束。圖 4.21為用戶記錄添加時序圖。
圖4.21 用戶記錄添加時序圖
進行用戶記錄刪除,用戶首先進入的是邊界類的用戶管理頁面,點擊頁面中某條要 刪除的記錄,進入用戶記錄瀏覽頁面。確定刪除信息后,點擊“刪除”按鈕,邊界類將 數據送到控制類的DBOpenHelper,進行數據刪除。控制類進行數據表的數據刪除操作 后,返回給邊界類。當刪除成功后,頁面由用戶記錄瀏覽頁面返回到用戶管理頁面,此 時用戶記錄瀏覽頁面結束。圖 4.22 為用戶記錄刪除時序圖。
1: S^tOn ClickListener( ) |
SetOnClickListener()
6: SetOnClickListener( )
X
圖4.22 用戶記錄刪除時序圖
進行密碼更新,用戶首先進入的是邊界類的用戶管理頁面,點擊頁面中某條要更新
的記錄,進入用戶記錄瀏覽頁面。確定更新信息后,點擊“更新”按鈕,進入到密碼更 新界面。此時,用戶記錄瀏覽界面生存周期結束。對該項數據更新后,點擊“更新”按 鈕,邊界類將數據送到控制類的DBOpenHelper,進行數據更新。控制類進行數據表的 數據更新操作后,返回給邊界類。當更新成功后,頁面由用戶記錄瀏覽頁面返回到用戶
管理頁面,此時密碼更新頁面結束。圖 4.23 為密碼更新時序圖。
5: update( )
6: DBOpenHelper(Context context)
圖4.23密碼更新時序圖
5.1.2 界面的具體實現
在本軟件系統中,使用/res/layout/中的.xml文件對界面進行設計、控件布局、控件
屬性設置。可以使用/res/layout/中的.xml文件來自定義某種控件的樣式。
采用線性布局的方法進行xml界面布局的設計。線性布局,即LinearLayout。其思 想是按照水平或處置的順序排列每一個元素。每一個元素里可以再包含一個 LinearLayout進行排列,進行嵌套的線性布局[20]。
加載背景圖片的方法為:
android:background="@drawable/background.png"
引用中文詞條的方法為:
android:text="@string/word1"
根據項目的需求與概要設計,農業信息化平臺數據采集系統共需要 33個界面。
在農戶管理模塊中,需要的界面分別是:村信息管理界面、村信息添加界面、村信 息詳情瀏覽界面、村信息更新界面、農戶檔案管理界面、農戶檔案添加界面、農戶檔案
詳情瀏覽界面、農戶檔案更新界面。農戶管理模塊中需要的八個界面依次如圖 5.2 所示。
在地塊管理模塊中,需要的界面分別是:地塊檔案管理界面、地塊檔案添加界面、 地塊檔案詳情瀏覽界面、地塊檔案更新界面、地塊制種管理界面、地塊制種添加界面、 地塊制種詳情瀏覽界面、地塊制種更新界面。地塊管理模塊中需要的八個界面依次如圖 5.3所示。
圖5.3 地塊管理模塊界面設計
在隔離區管理模塊中,需要的界面分別是:隔離區檔案管理界面、隔離區檔案添加
界面、隔離區檔案詳情瀏覽界面、隔離區檔案更新界面、隔離區栽培管理界面、隔離區 栽培添加界面、隔離區栽培詳情瀏覽界面、隔離區栽培更新界面。隔離區管理模塊中需
要的八個界面依次如圖 5.4 所示。
圖5.4 隔離區管理模塊界面設計
在用戶管理模塊中,需要的界面分別是:用戶管理界面、用戶添加界面、用戶瀏覽 界面、密碼更新界面。用戶管理模塊中需要的四個界面依次如圖 5.5 所示。
圖5.5 用戶管理模塊界面設計
5.2自定義控件及復用
在Android程序開發的過程中,雖然可以采用系統自帶的控件進行布局,但是為了 效果美觀和統一,往往需要更豐富的樣式,這時就需要自定義控件。
在農業信息化平臺數據采集系統的布局設計中,有兩類控件反復利用并需要根據模 塊而使用統一的風格:ListView和Spinner。因此,為每個模塊單獨開發一個自定義控件, 在界面布局時使用公用的自定義控件。
以地塊管理模塊的ListView為例,說明設計自定義控件ListView的流程。
將整個ListView看做一個新的布局。由于ListView的使用場所是子界面的信息列 表里,為方便查詢,在每行需要有兩個字段:“編號”和“創建時間”。為每個字段分別 定義一個標簽TextView,并為標簽設置相應的Id值。
在這里設置標簽文字的字體、顏色、大小、背景等屬性。
在適配器Adapter中,引用該自定義ListView及其id。
自定義控件sclist如下:
<?xml version="1.0" encoding="UTF-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:orientation="horizontal">
<TextView android:id="@+id/dklist_id_textview" android:layout_width="80dp" android:layout_height="wrap_content" android:gravity="center_horizontal" android:textColor="#FFFFFFFF" android:textSize="25sp"/>
<TextView //編號標簽
//寬度
//高度 //水平居中對齊 //白色
//字號
android:id="@+id/dklist_date_textview" //創建時間標簽
android:layout_width="280dp" android:gravity="center_horizontal" android:layout_height="wrap_content" android:textColor="#FFFFFFFF"
android:textSize="25sp"/>
</LinearLayout>
在地塊管理模塊適配器DKAdapter中,引用該自定義控件如下:
convertView = inflater.inflate(com.rice.R.layout.dklist,null);
holder.contantsid = (TextView)convertView.findViewById (R.id.dklist_id_textview); holder.contantsdate = (TextView)convertView.findViewById(R.id.dklist_date_textview);
在界面 DK_FieldActivity、DK_FieldzhongActivity 中,均使用適配器 DKAdapter,
繼而實現了自定義控件dklist的復用。
以隔離區管理模塊的Spinner為例,說明設計自定義控件Spinner的流程。
將整個Spinner看做一個新的布局。在這里設置標簽文字的字體、顏色、大小、對 齊方式等屬性。
自定義控件glspinner如下:
<?xml version="7.0" encoding="UTF-8"?>
<TextView
GL_BarrierUpdateActivity、GL_BarrierGAddActivity、GL_BarrierGUpdateActivity。 而每一個界面中又使用若干個自定義的spinnero在GL_BarrierAddActivity中,引 用glspinner的語句如下:
ArrayAdapter<CharSequence> adapter_terrtype=ArrayAdapter.createFromResource(this, R.array.terrtype, R.layout.glspinner);
ArrayAdapter<CharSequence> adapter_farmtype=ArrayAdapter.createFromResource(this,
R.array.farmtype, R.layout.glspinner);
ArrayAdapter<CharSequence> adapter_diseasetype=ArrayAdapter.createFromResource(this,
R.array.diseasetype, R.layout.glspinner);
ArrayAdapter<CharSequence> adapter_insecttype=ArrayAdapter.createFromResource(this,
R.array.insecttype, R.layout.glspinner);
ArrayAdapter<CharSequence> adapter_barriertype=ArrayAdapter.createFromResource(this,
R.array.barriertype, R.layout.glspinner);
5.3配置文件
在Android應用程序開發中,使用/res/layout/中的.xml文件對界面進行設計、控件 布局、控件屬性設置。另外,可以使用/res/layout/中的.xml文件來自定義某種控件的樣 式[21]。使用/AndroidManifest.xml設置使用的Android API的版本信息,進行每個Activity 的聲明,以及申請要使用的用戶資源。使用/res/values/中的strings.xml來聲明程序中使 用的中文詞條[22]。使用/res/values/中的arrays.xml來設置每個下拉列表項的元素。
配置文件strings.xml經常被用來聲明中文詞條及中文標點。配置文件strings.xm 1位 于資源文件夾res中的值類型文件夾values中。
結構如下:
<resources> //聲明配置系統的資源
<string name="app_name"> 農業信息化平臺數據采集系統 </string> </resources>
程序版本為1.0,使用的字符為utf-8。此為每個xml文件必須在開頭聲明的語句[23]。 <resources></resources>表明中間段為系統資源的聲明。在strings.xml 中,資源就是string。 “<string name="app_name">農業信息化平臺數據采集系統</string>"是一條聲明。根據 這一條語句,在layout文件夾下所有的xml文件中,如果有組件的text屬性為: android:text=”@string/app_name”
那么,在該組件上顯示的文字就是“農業信息化平臺數據采集系統”。
根據農業信息化平臺數據采集系統的軟件的設計,在strings.xml中聲明的string資 源如下:
<string name="sub0"> 農戶管理 </string>
<string name="sub1"> 地塊管理 </string>
<string name="sub3"> 隔離區管理 </string>
<string name= "sub5"> 用戶管理 </string>
<string name="sub6"> 村信息管理 </string>
<string name= "sub7"> 農戶檔案管理 </string>
<string name= "sub8"> 地塊檔案管理 </string>
<string name= "sub9"> 地塊制種管理 </string>
<string name=”sub13"> 隔離區檔案管理 </string>
<string name="sub14"> 隔離區栽培管理 </string>
根據上面所述,layout中xml需要的TextView、EditText等所有組件的text屬性在 使用中文或其他符號時,均需要用上述方式進行配置聲明。
在農業信息化平臺數據采集系統的設計中,界面的XML多處使用了組件Spinner。 Spinner是一個下拉式選擇按鈕。Spinner的每一個下拉選項都需要使用XML進行配置 聲明。因此,使用/res/values/中的arrays.xml來設置每個下拉列表項的元素[24]。
農業信息化平臺數據采集系統的各界面中,使用Spinner組件的情形如下表
表5.1 Spinner組件復用
資源ID 含義 所屬布局文件 arrays數組名稱
dkfield insert3 地塊類型 dkfieldinsert.xml earthtype
glbarrierg insert1 田塊類型 gl barriergrowinsert.xml fieldtype
glbarrier insert2 地形類型 gl barrierinsert.xml terrtype
glbarrier insert3 主要耕作類型 gl barrierinsert.xml farmtype
glbarrier insert4 主要病害 gl barrierinsert.xml diseasetype
glbarrier insert5 主要蟲害 gl barrierinsert.xml insectype
glbarrier insert6 隔離方式 gl barrierinsert.xml barriertype
以R.id.diseasetype為例,說明如何進行arrays.xml配置及在對應Activity程序中如
何引用。
在arrays.xml中,數組diseasetype的配置如表5.2所示。
表5.2 數組disasetype配置
資源編號 含義 所屬布局文件 arrays數組名稱
itemlOl 瘟疫病 arrays.xml disasetype
item102 白葉枯病 arrays.xml disasetype
item103 稻曲病 arrays.xml disasetype
item1O4 紋枯病 arrays.xml disasetype
item1O5 細菌性條斑病 arrays.xml diseasetype
item106 矮縮病 arrays.xml disasetype
item107 其他 arrays.xml disasetype
使用數組diseasetype的布局文件為glbarrierinsert.xml,其id號為 R.id.glbarrier_insert4,對應該布局文件的的 Activity 為 GL_BarrierAddActivity.java。
在布局文件glbarrierinsert.xml中,控件spinner的定義如下:
<Spinner android:id="@+id/glbarrier_insert4" android:layout_width="fill_parent" android:layout_height="55dp" android:layout_marginLeft="15dp" android:background="@drawable/spinner1"
/>
在程序文件view包中GL_BarrierAddActivity.java中,首先通過方法 this.findViewById()獲取控件spinner,然后設置一個數據適配器Adapter,在適配器中引 用數組 diseasetype。
程序代碼如下:
private Spinner glbarrier_insert4; glbarrier_insert4=(Spinner)this.findViewById(R.id.glbarrier_insert4);
ArrayAdapter<CharSequence>adapter_3=ArrayAdapter.createFromResource(this,
R.array.diseasetype, R.layout.glspinner);
adapter_3.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
glbarrier_insert.setAdapter(adapter_3);
AndroidManifest.xml是一個Android程序中最基本的配置文件,位于工程項目的根 目錄。AndroidManifest.xml的作用在于描述Activity> Service、Provider等各自的組件及 實現,還能指定程序所需要的硬件及接口[25]。
在AndroidManifest.xml中,首先要引用XML的題頭,聲明版本及字符utf-8。
然后,要聲明程序所在的package。本項目的總包為com.rice。
需要聲明程序使用的Android API的最低版本,本程序中使用的最低版本為Android 7。
在標簽<application></application>下icon指定系統的圖標,label指定系統的項目中 文名稱。<activity></activity>中需要注冊程序用到的每一個Activity類[26]。
農業信息化平臺數據采集系統的AndroidManifest.xml的配置過程如圖5.6所示:
5.4系統部署
本系統需要應用在Android操作系統的手機上,該手機Android操作系統的版本最 低應為Android 2.1。推薦Android 2.3.1為最佳適用版本。系統使用的數據庫為SQLite。 本系統的部署圖如圖 5.7 所示。
圖5.7 農業信息化平臺數據采集系統部署圖
開發農業信息化平臺數據采集系統,需要的開發工具分別為: Eclipse、 Android SDK[27]。
軟件開發環境配置的過程如下:
第一步,安裝Java開發軟件Eclipseo Eclipse的版本要在3.3以上[28]。
第二步,安裝Java的jdk(注:不能使jre),jdk要5.0以上。安裝后,配置jdk的環 境變量[29]。
第三步,下載Android SDK并安裝。
第四步,Eclipse ADT安裝。點擊菜單欄helpTinstall new software...然后點擊Add 會出來一個Add Site的窗口,這里Name輸入任意名稱,location中輸入插件的網絡地 址[30]。
在顯示連接成功后,然后 install,把"Android DDMS"和"Android Development Tools"都選中,finish就可以了。完成后,重啟eclipse來加載插件。到此,Android SDK 環境搭建完成[31]。
開發環境配置完畢。
第6章 結論
本論文根據移動通信技術、Android應用開發技術以及農業信息化的實際需求,完 成了農業信息化平臺數據采集系統的需求分析、設計及實現,生成了基于Android的農 業信息化平臺數據采集系統的智能手機應用軟件。
本文取得的具體成果如下:
(1)本文研究了 Android系統架構、Android應用開發技術、Android應用程序的組 成,以及Android開發中的SQLite數據庫開發技術;
(2)本文分析了農業信息化平臺數據采集系統所應用的軟硬件環境,分析了使用該 軟件系統的用戶角色,分析了農業信息管理業務活動流程,描述農業信息化平臺數據采 集系統的功能需求和性能需求,完成了“農業信息化平臺數據采集系統”的需求規格分 析;
(3)本文對農業信息化平臺數據采集系統的軟件結構進行了設計,對項目開發的層 次進行了分析,研究了軟件系統所需要的數據的概念模型和物理模型,設計了軟件系統 所需的各類接口及各個模塊,完成了對軟件系統的邏輯設計,完成了項目所需的 UML 圖,生成模型 AgricultureInfo_System.mdl;
(4)本文對 Android 應用軟件的開發進行了研究,按著分層開發的思想,對農業信 息化平臺數據采集系統這一項目進行分層次、分模塊開發,完成了對數據庫、業務層、 人機交互接口等組件的詳細設計,完成了軟件系統的界面設計,完成了“農業信息化平 臺數據采集系統”的物理設計。
(5)利用 Android 開發技術,實現了“農業信息化平臺數據采集系統”的中各項數 據信息的管理,包括農戶管理、地塊管理、隔離區管理和用戶管理。生成了可以使用的 程序AgricultureSystem.apk,并能夠在Android 2.1及以上版本的Android智能手機中使 用。
本文對農業信息化及移動開發的研究取得了一定的成功,實現了“農業信息化平臺 數據采集系統”這一基于Android智能手機的應用軟件程序。但是,仍有一些不足之處 有待改進:
(1)軟件系統的用戶角色單一,僅僅是業務員一種,且對所有用戶表都擁有讀寫權 限,軟件系統的安全性有待加強。
(2)軟件系統只是單機版軟件,尚不存在聯網數據傳輸功能。
(3)軟件系統的健壯性有待進一步加強。
總之,在后續的研究工作中,web方面,需要繼續研究Android應用開發技術,尤 其針對數據的上傳與下載技術進行研究,以及XML文件的封裝與解析技術也需進一步
研究;數據庫方面,也需要設計更適合的數據模型,能夠使軟件有更好的可擴充性;界
面方面,需要改善得更加美觀。
參考文獻
[1]Gavalas, Damianos,Economou, Daphne. Development Platforms for Mobile Applications: Status and Trends. IEEE Software.2011,28(1)
[2]Jae Kyu Lee,Jong Yeol Lee. Android programming techniques for improving performance. International Conference on Awareness Science and Technology (CAST 2011)3rd.2011
[3]Teng, Hui-Kang Lin, Cheng-Min Lang, Kuo-Chen Chu, Yi-Lun,Chen, Shou-Jie. An Implementation for Connecting Android Powered Device to External World. International Conference on Innovations in Bio-inspired Computing and Applications (IBICA 2011) 2nd.2011
[4]尚明華,秦磊磊,王風云,劉淑云,張曉艷.基于Android智能手機的小麥生產風險信息采 集系統[J]農業工程學報,2011,27(5)
[5]魏凱斌,汪志農.基于嵌入式農業信息采集系統關鍵技術的研究J].農機化研 究,2007,(4)
[6]王鳳花,張淑娟.精細農業田間信息采集關鍵技術的研究進展J].農業機械學 報,2008,39(5)
[7]姚昱曼,劉衛國.Android的架構與應用開發研究J].計算機系統應 用,2008,17(11):110-112,24
⑻張磊.Android平臺的應用開發研究J].計算機光盤軟件與應用,2011(17):211
[9]李搖楊,馮搖剛,李搖亮,羅擁華.基于Android的多媒體應用開發與研究J].計算機與 現代化, 2011(4):149-152
[10]趙宏偉.Android NDK開發環境實現與應用[J].電腦知識與技 術,2010,06(35):10055-10057
[11]趙世彧,張盛,王玉輝,白巖智能手機操作系統及其.Google Android上的軟件開發[J]. 煤炭技術, 2011,30(4):197-198
[12]張仕成.基于Google Android平臺的應用程序開發與研究[J].電腦知識與技術,2009,28
[13]郭少豪.Android手機交互應用開發[M].北京:中國鐵道出版社,2011
[14]謝星星.UML基礎與Rose建模實用教程[M].北京:清華大學出版社,2011-01
[15]Bernd Bruegge,Allen H.Dutoit.面向對象軟件工程使用UML、模式與Java[M].北京:
清華大學出版社 2011-02
[16]Jaroslav Tulach,王磊侏興.軟件框架設計的藝術[M].北京:人民郵電出版社,2011-04
[17]胡荷芬,張帆,高斐.UML系統建模基礎教程[M].北京:清華大學出版社,2010
[18]高彩麗,許黎民,袁海.Android應用開發范例精解[M].北京:清華大學出版社,2012
[19]明日科技.Android從入門到精通[M].北京:清華大學出版社,2012
[20]Tapas Kumar Kundu,Kolin Paul. Analyzing and Improving Performance and Energy Efficiency of Android. Journal of Low Power Electronics.2011,7(4)
[21]Yi-Hua Weng,Fu-Shing Sun ,Jeffry D. Grigsby. GeoTools: An android phone application in geology. Computers & geosciences.2012,44
[22]HIROSHIISHIGURO. Android science: conscious and subconscious recognition. Connection Science.2006,18(4)
[23]Jingming Xie. A web-based course on Android programming for higher vocational students. International journal of continuing engineering education and life-long learning.2012,22(1/2)
[24]Thimmarayaswamy K,Mary M Dsouza,G.Varaprasad. Low Power Techniques for an Android Based Phone. Computer architecture news.2011,39(2)
[25]Lee Chao. Deployment of Mobile Learning Course Materials to Android Powered Mobile Devices. International journal of distance education technologies.2012,10(3)
[26]Hikaru OOKURA,Hiroshi YAMAMOTO,Katsuyuki YAMAZAKI. Life-Log Observation of Walking Traces with Sensors of Android Mobile Device and Vector Map Matching. IEICE transactions on information and systems. 2012, E95-D(2)
[27]Barrera,David;Van Oorschot, Paul. Secure Software Installation on Smartphones. IEEE security & privacy.2011,9(3)
[28]Gossweiler,Rich,McDonough,Colin,Lin,James,Want,Roy.Argos:Building a Web Centric Application Platform on Top of Android. IEEE pervasive computing .2011,10(4)
[29]Ricardo Silva,Paulo Carvalho,Pedro Sousa ,Pedro Neves. Enabling Heterogeneous Mobility in Android Devices. Mobile networks & applications.2011,16(4)
[30]Asaf Shabtai,Uri Kanonov ,Yuval Elovici,Chanan Glezer,Yael Weiss. ‘Andromaly': a behavioral malware detection framework for android devices. Journal of intelligent information systems.2012,38(1)
[31]Banuri, H.,Alam, M.,Khan, S.,Manzoor, J. ,Ali, B. ,Khan, Y,Yaseen, M. ,Tahir, M.N.,Ali, T.,Alam, Q.,Zhang, X. An Android runtime security policy enforcement framework. Personal and ubiquitous computing.2012,16(6)