孫俊英 陳忠超
摘 要:基于ArcGIS for Android的采集系統(tǒng)作為當(dāng)下主要的野外采樣方式之一,被廣泛的應(yīng)用于各類(lèi)場(chǎng)景,針對(duì)不同采集內(nèi)容,采集系統(tǒng)的主要差異在于采樣的屬性數(shù)據(jù)所有不同,使用傳統(tǒng)基于xml布局的固定表單進(jìn)行屬性采樣,在功能的可擴(kuò)展性與復(fù)用性上存在一定難度?;诖?,本文利用java的反射技術(shù)、注解機(jī)制及android的自定義控件原理設(shè)計(jì)并實(shí)現(xiàn)了android表單界面生成器AutoForm,針對(duì)不同的采集對(duì)象,利用生成器,能動(dòng)態(tài)生成滿足需求的屬性采集界面,極大地降低了研發(fā)成本,具有良好的可擴(kuò)展性。
關(guān)鍵詞:ArcGIS for Android;java反射與注解機(jī)制;android自定義控件;AutoForm
0 引言
傳統(tǒng)野外數(shù)據(jù)采集主要基于紙質(zhì)記錄,該方式耗時(shí)費(fèi)力,效率低下,而基于ArcGIS for Android[1]移動(dòng)開(kāi)發(fā)技術(shù)實(shí)現(xiàn)的采集系統(tǒng)充分發(fā)揮了移動(dòng)智能終端操作簡(jiǎn)易、攜帶方便、具有良好導(dǎo)航定位的特性,已成為野外數(shù)據(jù)采集的新趨勢(shì)。使用采集系統(tǒng)進(jìn)行野外采樣通常需采集空間數(shù)據(jù)、屬性數(shù)據(jù)與多媒體數(shù)據(jù),針對(duì)各類(lèi)采集對(duì)象,采集的空間數(shù)據(jù)內(nèi)容相對(duì)固定,總是圍繞點(diǎn)、線、面三種類(lèi)型;但采集的屬性數(shù)據(jù)內(nèi)容卻因采樣對(duì)象的不同而有所差異,在進(jìn)行采集系統(tǒng)研發(fā)時(shí),針對(duì)不同的采集對(duì)象,往往需單獨(dú)定制屬性表單界面來(lái)滿足采集屬性數(shù)據(jù)的需求,這樣的表單結(jié)構(gòu)固定,可擴(kuò)展性差,若要修改采集屬性時(shí),往往需重新設(shè)計(jì),修改成本較大。
針對(duì)以上情況,本文基于java的反射技術(shù)[2]、注解機(jī)制[3]以及android的自定義控件原理[4]設(shè)計(jì)并實(shí)現(xiàn)了高度可復(fù)用、擴(kuò)展性良好的android表單界面生成器——AutoForm,AutoForm在程序運(yùn)行過(guò)程中動(dòng)態(tài)生成屬性采集界面,它依賴于簡(jiǎn)單的java對(duì)象(POJO)[5],只需對(duì)POJO的內(nèi)部屬性及注解進(jìn)行相應(yīng)變動(dòng),就能快速修改為滿足采集需求的屬性表單界面,再基于對(duì)象關(guān)系模型映射(ORM)[6],便能將填寫(xiě)的屬性數(shù)據(jù)直接持久化到數(shù)據(jù)庫(kù)中。
1 整體設(shè)計(jì)
表單界面生成器AutoForm的核心基礎(chǔ)是java反射技術(shù)與注解機(jī)制,利用標(biāo)注在POJO屬性上的注解控制表單所需組件,通過(guò)反射獲取到j(luò)ava對(duì)象及注解信息,根據(jù)注解信息實(shí)時(shí)調(diào)用android原生控件或用戶自定義控件動(dòng)態(tài)生成屬性表單,實(shí)現(xiàn)POJO與表單的一一映射關(guān)系,如圖1所示。POJO作為AutoForm的中間媒介,可以通過(guò)ORM獲取數(shù)據(jù)庫(kù)SQLite[7]中的數(shù)據(jù)并直接呈現(xiàn)在表單上,也能快速將表單上填寫(xiě)的數(shù)據(jù)信息快速持久化到數(shù)據(jù)庫(kù)中,實(shí)現(xiàn)了表單數(shù)據(jù)與數(shù)據(jù)庫(kù)記錄之間的快速轉(zhuǎn)換。
2 關(guān)鍵技術(shù)
2.1 java反射技術(shù)
java反射作為java的高級(jí)特性,能在運(yùn)行狀態(tài)中獲取任意一個(gè)類(lèi)的所有屬性與方法,對(duì)于任意一個(gè)對(duì)象,能夠調(diào)用該對(duì)象的所有方法和屬性。通過(guò)反射技術(shù),可以在高度解耦的情況下開(kāi)發(fā)各類(lèi)通用框架,實(shí)現(xiàn)程序開(kāi)發(fā)的靈活性與可擴(kuò)展性[8]。
2.2 java注解機(jī)制
java注解又稱(chēng)java標(biāo)注,在java語(yǔ)言中可以對(duì)類(lèi)、方法、變量、參數(shù)與包進(jìn)行標(biāo)注。Java注解允許被嵌入到字節(jié)碼中,通過(guò)java反射,可以在運(yùn)行時(shí)獲取注解信息,方便根據(jù)注解信息進(jìn)行相關(guān)操作。采用注解能提供更大的便捷性,易于程序的維護(hù)與修改。
2.3 android自定義控件原理
控件是android開(kāi)發(fā)的基本元素,是實(shí)現(xiàn)android功能必不可少的組成。在android中,控件大致分為ViewGroup控件和View控件兩類(lèi),自定義控件便是通過(guò)繼承View控件或ViewGroup控件為實(shí)現(xiàn)特殊需求而定義的控件。通過(guò)自定義控件可以提高開(kāi)發(fā)效率,降低維護(hù)成本,減少布局頁(yè)面與功能代碼之間的耦合性。
3 功能實(shí)現(xiàn)
表單界面生成器AutoForm通過(guò)反射技術(shù)與注解機(jī)制實(shí)現(xiàn)POJO與表單的一一映射,POJO中的每條屬性對(duì)應(yīng)表單界面中的每一欄控件,通過(guò)屬性上@AutoView注解中的value值指明控件類(lèi)型,display值作為控件標(biāo)識(shí),index值表示控件順序,bind值裝載單選多選條目。除了文字內(nèi)容,AutoForm還將多媒體的拍攝與展示融為一體,在面向ArcGIS for Android的采集系統(tǒng)中完成空間數(shù)據(jù)采集后,可以快速獲取屬性數(shù)據(jù)與多媒體數(shù)據(jù),如圖2所示。
AutoForm的優(yōu)勢(shì)之一在于針對(duì)采集對(duì)象變化或者采集屬性調(diào)整時(shí),只需簡(jiǎn)單變動(dòng)POJO中的注解內(nèi)容,便可以快速生成滿足需求的屬性表單界面,這相較傳統(tǒng)的固定表單具有更強(qiáng)大的可擴(kuò)展性。優(yōu)勢(shì)之二是屬性表單界面中每欄組件的值與POJO中的各屬性一一對(duì)應(yīng),在表單界面中完成采集后,會(huì)直接賦值給POJO的各屬性;反之,POJO的各屬性值也能直接呈現(xiàn)在表單界面上,將POJO作為中間媒介,再結(jié)合ORM,能實(shí)現(xiàn)數(shù)據(jù)庫(kù)記錄與表單內(nèi)容的快速轉(zhuǎn)換。
4 結(jié)語(yǔ)
基于ArcGIS for Android的移動(dòng)智能終端采集系統(tǒng)由于操作的簡(jiǎn)易性、攜帶的便捷性以及定位的精準(zhǔn)性,已成為當(dāng)下野外采樣的主要手段之一,當(dāng)針對(duì)各類(lèi)采集對(duì)象,采集系統(tǒng)的主要差異在于采集的屬性數(shù)據(jù)與多媒體內(nèi)容不同,而本文所提出的表單界面生成器AutoForm能快速根據(jù)差異進(jìn)行擴(kuò)展。當(dāng)采集對(duì)象變化或者采集的屬性內(nèi)容有所變動(dòng)時(shí),只需簡(jiǎn)單修改AutoForm中POJO的屬性與注解內(nèi)容,便能快速生成滿足需求的屬性表單界面,相較于傳統(tǒng)基于xml生成的布局表單,AutoForm具有良好的擴(kuò)展性和高度可復(fù)用性。這在面向ArcGIS for Android采集系統(tǒng)研發(fā)中,能極大地降低研發(fā)成本,變更需求時(shí)也能快速做出響應(yīng),具有一定推廣使用價(jià)值。
參考文獻(xiàn)
[1] 張海瑞,吳學(xué)饒,蘭小機(jī).基于ArcGIS for Android野外實(shí)習(xí)數(shù)據(jù)采集與導(dǎo)航系統(tǒng)的實(shí)現(xiàn)[J].測(cè)繪工程,2015(3):36-39.
[2] 孫巍,徐學(xué)東,徐學(xué)軍.Java反射機(jī)制在可重構(gòu)Web框架中的應(yīng)用[J].計(jì)算機(jī)工程與應(yīng)用,2005,41(36):92-94.
[3] 周中雨,李洋,楊程屹,等.基于Java注解的Drools業(yè)務(wù)規(guī)則開(kāi)發(fā)框架設(shè)計(jì)實(shí)現(xiàn)[J].電子測(cè)試,2017(6):63-65.
[4] 張香倩,黃林生,陳陽(yáng)德.基于Android的自定義媒體播放控件設(shè)計(jì)與實(shí)現(xiàn)[J].軟件導(dǎo)刊,2016(5):79-81.
[5] 吳昊野.淺談信息系統(tǒng)工程和POJO模型組件開(kāi)發(fā)[J].科教導(dǎo)刊(電子版),2016(4):141.
[6] 呂威.對(duì)象模型、關(guān)系模型與對(duì)象關(guān)系映射技術(shù)[J].信息通信,2012(6):87.
[7] 劉仕華.基于Android的SQLite數(shù)據(jù)庫(kù)操作管理[J].信息化建設(shè),2015(9):252.
[8] 徐寶文,周超洪,周天琳,等.面向方面的程序設(shè)計(jì):概念、實(shí)現(xiàn)與未來(lái)[J].計(jì)算機(jī)與數(shù)字工程,2005,33(8):1-10.