姚永明,梅雨凱,章 香,姚永瑞
?
基于安卓的南郵通達掌上校園APP的實現(xiàn)
姚永明,梅雨凱,章 香,姚永瑞
(南京郵電大學(xué)通達學(xué)院,江蘇 揚州 225200)
《基于安卓的南郵通達掌上校園APP的需求分析》其中分析了設(shè)計這款 APP的功能和非功能需求,將功能需求分成了課表查詢等七個模塊,非功能需求四個模塊。因此本文主要討論如何實現(xiàn)上文中的各種具體功能。
南郵通達;掌上校園;APP;安卓;實現(xiàn)
眾所周知:軟件=程序+數(shù)據(jù)+文檔。安卓APP也不例外,APP各項功能的實現(xiàn)最重要的就是數(shù)據(jù)的來源,而南郵通達掌上校園APP的數(shù)據(jù)幾乎全是爬取的,學(xué)習(xí)課業(yè)方面的數(shù)據(jù)(比如課程表,成績等)來自學(xué)校的正方教務(wù)系統(tǒng),學(xué)校的通知公告等信息來自學(xué)校官網(wǎng)。通過模擬學(xué)生登陸便可以獲取到正方教務(wù)系統(tǒng)里面的數(shù)據(jù)和相關(guān)鏈接,模擬瀏覽器訪問學(xué)校教務(wù)系統(tǒng)可以使用火狐瀏覽器中的插件(FireBug)或者HttpWatch抓包工具;無獨有偶,模擬瀏覽學(xué)校網(wǎng)頁也可以獲取到所需數(shù)據(jù)信息。但是如何去獲取、獲取到的數(shù)據(jù)是什么格式、是否可以直接使用、用什么方式展示、怎么存儲等問題困擾了筆者。筆者最后都一一解決了以上問題,基本完成了這個項目。
筆者使用封裝好的網(wǎng)絡(luò)請求框架AsyncHttp-Re-s-ponseHandler寫了一個網(wǎng)絡(luò)請求工具——HttpUtil,實現(xiàn)了get()和post()基本功能,利用需要爬取的網(wǎng)址,根據(jù)一定的爬蟲策略便可以得到數(shù)據(jù)。但是得到的數(shù)據(jù)不可以直接使用,需要解析才能使用。解析有許多方式,例如利用Jsoup-1.8.3就可以對html進行解析從而得到想要的數(shù)據(jù)。拿到數(shù)據(jù)并不代表可以直接展示,因為爬出來的數(shù)據(jù)大多是亂序的。至于存儲方案使用的是SQLite實現(xiàn)數(shù)據(jù)的持久化保存。并在SD卡中建立一個文件夾用來存放APP的數(shù)據(jù)資料。展示方面,要得益于安卓平臺的強大,例如成績的展示,可以用Expanda-bleListView來實現(xiàn)成績的展示,通過編寫ListView的setOnItem-ClickListener()方法來實現(xiàn)點擊列表中子項后的功能[1]。下面對以上問題一一進行詳細分析。
1.1.1 網(wǎng)絡(luò)框架(AsyncHttpResponseHandler( ))
使用異步網(wǎng)絡(luò)請求框架寫一個能實現(xiàn)請求post()和獲取get()的工具類,避免后面重復(fù)使用造成代碼冗余。并在登錄的時候初始化CookieStore,以實現(xiàn)登陸的保持。
1.1.2 數(shù)據(jù)存儲的實現(xiàn)
數(shù)據(jù)持久化是指將應(yīng)用系統(tǒng)中所需要的數(shù)據(jù)保存到持續(xù)性信息載體(例如,數(shù)據(jù)庫或其它信息存儲方式)中的過程[2]。安卓平臺提供數(shù)據(jù)庫(SQLite)的支持,安卓數(shù)據(jù)存儲有多種方案比如GreenDAO、OrmLite等。由于要存儲的數(shù)據(jù)不是很大,可以寫一個簡單的自定義存儲工具類(例如 courseDB)實現(xiàn)數(shù)據(jù)的讀取和寫入等操作。
1.1.4 Html 解析工具類的實現(xiàn)
由于下載不同的文件需要不同的URL,為了避免代碼的冗余需要寫一個下載的工具類實現(xiàn)對不同文件的下載,并對下載的文件進行壓縮的處理以減小文件存儲所占資源。
1.1.3 下載類工具的實現(xiàn)
HIML解析的過程是將HTML文檔的流式數(shù)據(jù)結(jié)構(gòu)化的過程[3]。數(shù)據(jù)的來源幾乎全靠爬取,難免要多次解析不同的HTML頁面文件,因此寫一個HTML解析工具類很有必要,解析HTML可以有很多方案,比如HtmlParser、Jsoup 等。本文所涉及到的是Jsoup解析,Jsoup是Android應(yīng)用開發(fā)中著名的第三方類庫,其主要應(yīng)用于解析html文件,獲取用戶需要的數(shù)據(jù)。它提供了一套非常完善的API接口規(guī)范,開發(fā)者可以通過DOM遍歷或者類似于jQuery的操作方法來取出和操作數(shù)據(jù)。同時它還包含了一個支持最新 HTML5技術(shù)的解析器分支,能夠很好的降低解析的時間和內(nèi)存的占用[4]。
1.2.1 數(shù)據(jù)的來源
介于數(shù)據(jù)獲取的局限性,對于學(xué)生而言無法輕易觸碰學(xué)校的數(shù)據(jù)庫里面的數(shù)據(jù)。所以采用爬取的方式比較容易。網(wǎng)絡(luò)爬蟲(Web Crawler),又稱為網(wǎng)絡(luò)蜘蛛(Web Spider)或Web信息采集器,是一個自動下載網(wǎng)頁的計算機程序或自動化腳本,是搜索引擎的重要組成部分[5]。但爬出來的數(shù)據(jù)無序甚至?xí)霈F(xiàn)亂碼的問題,所以后期需要對數(shù)據(jù)分析和處理才能使用。
1.2.2 數(shù)據(jù)的展示方式
比如從正方教務(wù)系統(tǒng)后臺爬出來的課程數(shù)據(jù),一大串課程名字和上課時間地點等信息。不能直接用一個頁面展示,那樣會顯得很唐突??梢詤⒖汲壵n程表的設(shè)計風(fēng)格,設(shè)計一種類似的布局方式:在布局文件中嵌套使用線性布局和相對布局的嵌套,自定一個shape(圓角矩形,彩色背景)并在Java文件中動態(tài)增加shape用來顯示課程。
1.3.1 數(shù)據(jù)的處理
由于課程之間有許多相識之處,比如都有課程名字。但又有許多不同,如有些課沒有學(xué)分等。這就導(dǎo)致沒辦法用一個單一的模式去顯示不同的課程,需要對數(shù)據(jù)進行處理:對沒有的數(shù)據(jù)填充無關(guān)項,在使用數(shù)據(jù)的時候以此進行判斷,決定顯示或者不顯示。
1.3.2 數(shù)據(jù)的展示
成績和等級數(shù)據(jù)不可能和課表用同一個方式去顯示,因此要換一個方式,可以使用使用自定義的ExpandableListView展示成績的詳細情況。
選課環(huán)節(jié)和上面幾個功能不同,涉及到與學(xué)校服務(wù)器交互的過程,不僅要獲取數(shù)據(jù),還要上傳數(shù)據(jù)。因此要特別關(guān)注上傳時要傳入什么參數(shù),可以通過HttpWatch軟件來抓包分析。一些學(xué)院和專業(yè)的選課只有在學(xué)期末和學(xué)期初才開放,只有在這段時間才能獲取到數(shù)據(jù),因此選課要對最后選課的結(jié)果做個判斷——用來反饋用戶選課的成功和失敗情況。
學(xué)生手冊無需使用網(wǎng)絡(luò)來獲取數(shù)據(jù),可以直接封裝在APP中。使用自定義的控件TreeView將學(xué)生手冊按目錄展示。手冊的內(nèi)容以“.txt”的格式保存在APP系統(tǒng)文件夾assert下,通過代碼動態(tài)讀取并顯示來完成學(xué)生手冊的功能。
掌上校園APP應(yīng)具有美觀而友好的UI界面,提供良好的用戶體驗并且能夠讓用戶快速上手。安卓原生態(tài)控件是無法滿足新時代人們的審美需求。因此,對APP進行美工的設(shè)計勢在必行,主要針對界面,動畫效果,圖標(biāo)等優(yōu)化。圖標(biāo)的制作可以選擇畫圖的方式,也可以選擇使用現(xiàn)有的圖片后期加工,例如利用PhotoShop等工具實現(xiàn)圖片的加工處理,適當(dāng)增加動畫的效果可以使得APP顯得更加有活力和生機。
2.推動“三大”革命。要以農(nóng)村生活垃圾處理、生活污水治理、村容村貌整治為主攻方向,堅持不懈推進農(nóng)村“廁所革命”,因地制宜、分類施策,推廣衛(wèi)生廁所的大眾化、普及化,著力改善農(nóng)村人居環(huán)境,努力補齊影響農(nóng)民群眾生活品質(zhì)的短板,推進美麗宜居鄉(xiāng)村建設(shè)。
客戶端系統(tǒng)應(yīng)盡量減少資源的損耗,不用的資源應(yīng)及時回收[6]?,F(xiàn)在市場上的APP絕大多數(shù)都有清除緩存的功能。由于手機的存儲空間有限,用戶都希望能及時處理掉緩存數(shù)據(jù)。清除緩存功能就是將用戶數(shù)據(jù)文件夾和內(nèi)存等中的非依賴數(shù)據(jù)清空。同樣地,CPU也需要及時處理掉一些后臺進程和服務(wù),來減少資源的消耗。對返回鍵實行監(jiān)聽,當(dāng)用戶退出APP時及時銷毀活動(Activity)和一些服務(wù)(Service)。
安卓系統(tǒng)是基于Linux3.0發(fā)展起來的,所以,該系統(tǒng)的核心就已經(jīng)集成了Linux的絕大多數(shù)特點[7]。而且,其中主要部分就涉及到安卓系統(tǒng)安全認(rèn)證及網(wǎng)絡(luò)協(xié)議棧等等內(nèi)容[8]。使APP和正方教務(wù)系統(tǒng)保持一致:用戶使用學(xué)校提供的教務(wù)賬號和密碼登錄,登陸時需要輸入驗證碼。APP提供修改密碼的功能,方便用戶及時修改密碼。用戶退出時及時清空后臺數(shù)據(jù),增加權(quán)限管理等都可以提高APP的安全性。
if (result) {
HttpUtil.(url, params, new AsyncHttpResponseHandler() {
@Override
publicvoid onSuccess(int statusCode, Header[] headers,
byte[] responseBody) {
經(jīng)過多次測試運行,統(tǒng)計出平均識別率,得到在不同像素分類情況下PNN的識別率。見表1。除此之外,在以上結(jié)論的前提下(10像素組擁有最佳的識別效果)與PNN神經(jīng)網(wǎng)絡(luò)相似的BP神經(jīng)網(wǎng)絡(luò)以及LVQ神經(jīng)網(wǎng)絡(luò)也使用相同的特征矩陣進行了識別工作,與其進行了橫向?qū)Ρ取榱藢Ρ鹊墓?,BP神經(jīng)網(wǎng)絡(luò)和LVQ神經(jīng)網(wǎng)絡(luò)將采用相同的10像素組特征矩陣進行訓(xùn)練和分類。
try {
String content = new String(responseBody, "gb2312");
boolean result = manager.parseCourse(content);
重要功能的部分代碼與截圖
在產(chǎn)品技術(shù)要求的條件得以滿足的情況下,為減少產(chǎn)品生產(chǎn)成本,原材料和元器件同樣也要考慮其經(jīng)濟合理性,選用最經(jīng)濟合理的原材料和元器件。從而降低了設(shè)備的維護成本和運行成本。
prefUtil.setBoolean-KeyData("first_refreshcourse", true);
prefUtil.commit();
dialog.dismiss();
Intent i = new Intent(RefreshActivity.this,
合作學(xué)習(xí)是以小組為單位,小組成員按學(xué)習(xí)能力和學(xué)習(xí)成績的優(yōu)、中、差三類搭配安排。小組討論形式的民主、寬松的氛圍,會觸發(fā)學(xué)生的創(chuàng)新思維,進而逐步形成創(chuàng)新意識。
CourseActivity. class);
初始時刻,直流端接入5 V低壓直流電,S1和S2開通,簡化的等效電路如圖5(a)所示。此時A相與C相同時開通,狀態(tài)方程為
} else {
dialog.dismiss();
Toast.(Re-----freshActivity.this, "未獲取到課表數(shù)據(jù)... !",
Toast.).show();
}
} catch (UnsupportedEncodingException e) {
dialog.dismiss();
e.printStackTrace();
}
}
@Override
publicvoid onFailure(int statusCode, Header[] headers,
byte[] responseBody, Throwable error) {
根據(jù)河道的實際情況以及景觀效果,于河道內(nèi)設(shè)置了挺水植物栽培區(qū),并對栽培的挺水植物類型進行如下設(shè)計:于河道周邊建設(shè)了面積為3800m2的挺水植物栽培區(qū)域,并選擇了千屈菜、蘆葦、梭魚草、黃花鳶尾以及花葉蘆竹等作為主要種植的挺水植物,針對所種植的水生植物進行系統(tǒng)化的管理,提高植物的成活性和生物量。同時,根據(jù)植物的生態(tài)位以及溫型,結(jié)合河道的環(huán)境條件對沉水植物的栽培品種進行了系統(tǒng)性的設(shè)計,并提前進行了試驗栽培工作,結(jié)果發(fā)現(xiàn)金魚藻、黑藻、苦草以及菹草等沉水植物可以良好適應(yīng)河道環(huán)境。
dialog.dismiss();
11月,時至立冬,天氣漸涼。對于飽受花粉過敏折磨的患者來說,這無疑是個好時節(jié),因為雜草類花粉隨著花期已過而消失殆盡,花粉癥患者終于不再有頻繁地打噴嚏、流涕、內(nèi)耳刺癢等癥狀,也可以擺脫厚厚的口罩,輕裝出行。
Toast.(RefreshActivity.this, "課表獲取失敗... !",
Toast.).show();
byte[] responseBody) {
}
});
}
String content = new String(responseBody, "gb2312");
startActivity(i);
@Override
publicvoid onSuccess(int statusCode, Header[] headers,
Bushing軸套力是通過一種數(shù)學(xué)模型的方式,利用軟件設(shè)置彈性和阻尼來模擬幾個零件之間的連接關(guān)系,通過設(shè)置Bushing徑向剛度、軸向剛度和角剛度的數(shù)值來模擬軸承。由于軸承的阻尼很小,因此在本章中忽略不計。根據(jù)軸承類型選取位移剛度數(shù)值為Kx=1.84e5、Ky=1.84e5、Kz=2.6e5,選取的角度剛度數(shù)值為Kxx=1.4e5、Kyy=1.4e5、 Kzz=0[9]。
“是啊,如果我不逞英雄該多好!我也可以去辦公司賺錢,有空了陪你去北京游故宮登長城,去蒙古草原縱馬奔馳,到西北戈壁灘騎駱駝看沙漠日出日落……”
try {
各地區(qū)要成立由草原行政部門主要領(lǐng)導(dǎo)、分管領(lǐng)導(dǎo)參加的草原鼠災(zāi)防治指揮部,夯實工作責(zé)任,認(rèn)真組織落實草原鼠害防治工作;要結(jié)合當(dāng)?shù)貙嶋H制定項目實施方案,抓住關(guān)鍵時期和重點環(huán)節(jié),細化防治目標(biāo)和任務(wù),提出資金使用意見,加強督促和指導(dǎo),落實各項工作措施。
HttpUtil.(url, new AsyncHttpResponseHandler() {
1.從被動到主動,是社區(qū)自治的前提。社區(qū)居民要有主人翁的意識,通過爭當(dāng)社區(qū)精英、熱心腸,在做事的過程中帶動更多的人參與,形成差序帶動格局。在主動服務(wù)的過程中形成內(nèi)生獎懲機制,評選出“熱心阿姨”“好大哥”等光輝形象,對那些習(xí)慣于搭便車,享受了服務(wù)不干事、不配合的家庭或個人要透明、要曝光。
courseViewState = manager.ParseCourseViewState(content);
if (!courseViewState.is-Empty()) {
if (courseViewState. length() > 5) {
Message cour-seMsg = new Message();
courseMsg.wh--at =;
注意,以上推導(dǎo)未考慮體效應(yīng)的影響,即假設(shè)所有N型MOS管的閾值電壓都相等。實際仿真過程中MOS管尺寸如表1。
handler.send-Message(courseMsg);
} else {
Toast.(RefreshActivity.this,
"系統(tǒng)繁忙,請稍后重試...", Toast.). show();
2) 運行費用估算:氧化藥劑費用100元/t,生化藥劑費用20元/t,電費30元/t,總計費用150 元 /t。
}
} else {
dialog.dismiss();
Toast.(Re-freshActivity.this, "系統(tǒng)繁忙,請稍后重試...",
Toast.).show();
}
} catch (UnsupportedEncodingException e) {
dialog.dismiss();
e.printStackTrace();
}
}
@Override
publicvoid onFailure(int statusCode, Header[] headers,
byte[] responseBody, Th-r--o--wable error) {
dialog.dismiss();
Toast.(getAPPlicati-onContext(), "查詢失?。?,
Toast.).show();
}
});
}
部分功能截圖:如圖1、圖2所示
圖1 設(shè)置界面
圖2 教務(wù)界面
綜上,南郵通達掌上校園APP主要實現(xiàn)了7個功能需求,基本滿足了本校學(xué)生學(xué)業(yè)管理的需求。開發(fā)掌上校園對于我們而言培養(yǎng)了動手能力和團隊意識;對于學(xué)校來說,掌上校園的開發(fā)是校園信息化建設(shè)的一個重要標(biāo)志,為學(xué)校的信息發(fā)布、學(xué)生管理、教育教學(xué)創(chuàng)造了新的環(huán)境,改變了傳統(tǒng)的單向信息交流模式和管理方法,使學(xué)校成為一個真正的,便捷的“數(shù)字化校園”[9]。在實現(xiàn)的過程中我們也遇到過一些小問題,比如驗證碼圖片太小的問題、登錄重定向的問題等。不過最后這些問題都得到解決,到此APP基本完成。此外,在開發(fā)這款A(yù)PP的時候選擇的應(yīng)用模式也和傳統(tǒng)模式不一樣。應(yīng)用模式由“基于計算機網(wǎng)絡(luò)和PC客戶端”模式轉(zhuǎn)向“基于計算機網(wǎng)絡(luò)和無線互聯(lián)網(wǎng)絡(luò)的PC機和各種手持智能設(shè)備終端作為客戶端”[10],這也是開發(fā)這款A(yù)PP的意義所在——迎合時代變化潮流。但也還可以繼續(xù)深度開發(fā):比如開發(fā)一個搶普通話考試的功能,解決普通話考試報名額度難搶的問題;比如開發(fā)一個一鍵好評、一鍵中評、一鍵差評和自選評價的功能來減輕每學(xué)期末輔導(dǎo)員和教師評價需要逐個點開的負(fù)擔(dān)。如果這些功能可以實現(xiàn),便可以成為這款A(yù)PP的閃光點。最后為了把這個 APP最到最好,能夠在學(xué)校推廣,設(shè)計了一個“加入我們”的功能,用來召集有興趣的同學(xué)進行深度開發(fā),給APP注入新的活力。
[1] 王海峰. 基于Android技術(shù)校園信息平臺客戶端的研究與設(shè)計[J]. 軟件工程師, 2014(9): 43-45.
[2] 歐陽宏基. 等. 一種基于DAO設(shè)計模式與Hibernate框架的數(shù)據(jù)持久化層模型[J]. 微型計算機應(yīng)用, 2009, 30(3): 36-37.
[3] 王強, 等. Web文檔清洗系統(tǒng)中HTML解析器的開發(fā)[J]. 計算機應(yīng)用研究, 2002(2): 55-56.
[4] 盛雪豐. Android開發(fā)一大神器——Jsoup[J]. 電腦知識與技術(shù), 2015(3): 63-65.
[5] 孫立偉, 等. 網(wǎng)絡(luò)爬蟲技術(shù)的研究[J]. 2010, 6(15): 4112-4113.
[6] 甘麗, 王雅婷. 基于Android系統(tǒng)的校園手機評教系統(tǒng)的設(shè)計與開發(fā)[J]. 通化師范學(xué)院學(xué)報(自然科學(xué)), 2013, 34(4): 39-41.
[7] 朱婷婷. 基于Android平臺的PKM軟件的研究與設(shè)計[D]. 浙江師范大學(xué), 2012.
[8] 詹凱. 基于安卓操作系統(tǒng)的應(yīng)用軟件開發(fā)分析[J]. 通訊世界, 2016, 262(2): 262-263.
[9] 謝杭, 等. 基于安卓平臺的掌上校園APP的設(shè)計與開發(fā). 軟件工程, 2016, 19(3): 24-25.
[10] 王超, 等. 基于安卓的掌上校園客戶端設(shè)計初探[J]. 電子技術(shù)與軟件工程, 2014: 44-45.
Android-Based Implementation of the Southern Post Mastery Palm Campus APP
YAO Yong-ming, MEI Yu-kai, ZHANG Xiang, YAO Yong-rui
(Tongda college, Nanjing University of Posts and Telecommunications, YangZhou, JiangSu 225200)
Inheriting "An analysis of the requirement of Android-based Nanyou Tongda Palm Campus APP" which analyzes the functional and non-functional requirements for designing this APP, and divides the functional requirements into seven modules such as curriculum-table queries. Four modules are required. Therefore, this article mainly discusses how to implement various specific functions above.
Palm campus; Android; APP; Realize
TP31
A
10.3969/j.issn.1003-6970.2018.08.011
南郵通達學(xué)院2017年大學(xué)生科技創(chuàng)新訓(xùn)練計劃(STITP):基于Android的南郵通達掌上校園APP(項目編號CX66617016)
姚永明(1987-),男,西安郵電大學(xué)計算機學(xué)院碩士研究生,主要從事數(shù)字圖像處理研究和軟件工程;章香(1997-),女,南京郵電大學(xué)通達學(xué)院本科生,研究方向物聯(lián)網(wǎng);姚永瑞(1997-),男,南京郵電大學(xué)通達學(xué)院本科生,研究方向物聯(lián)網(wǎng)。
梅雨凱(1995-),男,南京郵電大學(xué)通達學(xué)院本科生,研究方向物聯(lián)網(wǎng)和軟件工程。
本文著錄格式:姚永明,梅雨凱,章香,等. 基于安卓的南郵通達掌上校園APP的實現(xiàn)[J]. 軟件,2018,39(8):48-51