姚永明,梅雨凱,章 香,姚永瑞
?
基于安卓的南郵通達掌上校園APP的實現
姚永明,梅雨凱,章 香,姚永瑞
(南京郵電大學通達學院,江蘇 揚州 225200)
《基于安卓的南郵通達掌上校園APP的需求分析》其中分析了設計這款 APP的功能和非功能需求,將功能需求分成了課表查詢等七個模塊,非功能需求四個模塊。因此本文主要討論如何實現上文中的各種具體功能。
南郵通達;掌上校園;APP;安卓;實現
眾所周知:軟件=程序+數據+文檔。安卓APP也不例外,APP各項功能的實現最重要的就是數據的來源,而南郵通達掌上校園APP的數據幾乎全是爬取的,學習課業方面的數據(比如課程表,成績等)來自學校的正方教務系統,學校的通知公告等信息來自學校官網。通過模擬學生登陸便可以獲取到正方教務系統里面的數據和相關鏈接,模擬瀏覽器訪問學校教務系統可以使用火狐瀏覽器中的插件(FireBug)或者HttpWatch抓包工具;無獨有偶,模擬瀏覽學校網頁也可以獲取到所需數據信息。但是如何去獲取、獲取到的數據是什么格式、是否可以直接使用、用什么方式展示、怎么存儲等問題困擾了筆者。筆者最后都一一解決了以上問題,基本完成了這個項目。
筆者使用封裝好的網絡請求框架AsyncHttp-Re-s-ponseHandler寫了一個網絡請求工具——HttpUtil,實現了get()和post()基本功能,利用需要爬取的網址,根據一定的爬蟲策略便可以得到數據。但是得到的數據不可以直接使用,需要解析才能使用。解析有許多方式,例如利用Jsoup-1.8.3就可以對html進行解析從而得到想要的數據。拿到數據并不代表可以直接展示,因為爬出來的數據大多是亂序的。至于存儲方案使用的是SQLite實現數據的持久化保存。并在SD卡中建立一個文件夾用來存放APP的數據資料。展示方面,要得益于安卓平臺的強大,例如成績的展示,可以用Expanda-bleListView來實現成績的展示,通過編寫ListView的setOnItem-ClickListener()方法來實現點擊列表中子項后的功能[1]。下面對以上問題一一進行詳細分析。
1.1.1 網絡框架(AsyncHttpResponseHandler( ))
使用異步網絡請求框架寫一個能實現請求post()和獲取get()的工具類,避免后面重復使用造成代碼冗余。并在登錄的時候初始化CookieStore,以實現登陸的保持。
1.1.2 數據存儲的實現
數據持久化是指將應用系統中所需要的數據保存到持續性信息載體(例如,數據庫或其它信息存儲方式)中的過程[2]。安卓平臺提供數據庫(SQLite)的支持,安卓數據存儲有多種方案比如GreenDAO、OrmLite等。由于要存儲的數據不是很大,可以寫一個簡單的自定義存儲工具類(例如 courseDB)實現數據的讀取和寫入等操作。
1.1.4 Html 解析工具類的實現
由于下載不同的文件需要不同的URL,為了避免代碼的冗余需要寫一個下載的工具類實現對不同文件的下載,并對下載的文件進行壓縮的處理以減小文件存儲所占資源。
1.1.3 下載類工具的實現
HIML解析的過程是將HTML文檔的流式數據結構化的過程[3]。數據的來源幾乎全靠爬取,難免要多次解析不同的HTML頁面文件,因此寫一個HTML解析工具類很有必要,解析HTML可以有很多方案,比如HtmlParser、Jsoup 等。本文所涉及到的是Jsoup解析,Jsoup是Android應用開發中著名的第三方類庫,其主要應用于解析html文件,獲取用戶需要的數據。它提供了一套非常完善的API接口規范,開發者可以通過DOM遍歷或者類似于jQuery的操作方法來取出和操作數據。同時它還包含了一個支持最新 HTML5技術的解析器分支,能夠很好的降低解析的時間和內存的占用[4]。
1.2.1 數據的來源
介于數據獲取的局限性,對于學生而言無法輕易觸碰學校的數據庫里面的數據。所以采用爬取的方式比較容易。網絡爬蟲(Web Crawler),又稱為網絡蜘蛛(Web Spider)或Web信息采集器,是一個自動下載網頁的計算機程序或自動化腳本,是搜索引擎的重要組成部分[5]。但爬出來的數據無序甚至會出現亂碼的問題,所以后期需要對數據分析和處理才能使用。
1.2.2 數據的展示方式
比如從正方教務系統后臺爬出來的課程數據,一大串課程名字和上課時間地點等信息。不能直接用一個頁面展示,那樣會顯得很唐突。可以參考超級課程表的設計風格,設計一種類似的布局方式:在布局文件中嵌套使用線性布局和相對布局的嵌套,自定一個shape(圓角矩形,彩色背景)并在Java文件中動態增加shape用來顯示課程。
1.3.1 數據的處理
由于課程之間有許多相識之處,比如都有課程名字。但又有許多不同,如有些課沒有學分等。這就導致沒辦法用一個單一的模式去顯示不同的課程,需要對數據進行處理:對沒有的數據填充無關項,在使用數據的時候以此進行判斷,決定顯示或者不顯示。
1.3.2 數據的展示
成績和等級數據不可能和課表用同一個方式去顯示,因此要換一個方式,可以使用使用自定義的ExpandableListView展示成績的詳細情況。
選課環節和上面幾個功能不同,涉及到與學校服務器交互的過程,不僅要獲取數據,還要上傳數據。因此要特別關注上傳時要傳入什么參數,可以通過HttpWatch軟件來抓包分析。一些學院和專業的選課只有在學期末和學期初才開放,只有在這段時間才能獲取到數據,因此選課要對最后選課的結果做個判斷——用來反饋用戶選課的成功和失敗情況。
學生手冊無需使用網絡來獲取數據,可以直接封裝在APP中。使用自定義的控件TreeView將學生手冊按目錄展示。手冊的內容以“.txt”的格式保存在APP系統文件夾assert下,通過代碼動態讀取并顯示來完成學生手冊的功能。
掌上校園APP應具有美觀而友好的UI界面,提供良好的用戶體驗并且能夠讓用戶快速上手。安卓原生態控件是無法滿足新時代人們的審美需求。因此,對APP進行美工的設計勢在必行,主要針對界面,動畫效果,圖標等優化。圖標的制作可以選擇畫圖的方式,也可以選擇使用現有的圖片后期加工,例如利用PhotoShop等工具實現圖片的加工處理,適當增加動畫的效果可以使得APP顯得更加有活力和生機。
2.推動“三大”革命。要以農村生活垃圾處理、生活污水治理、村容村貌整治為主攻方向,堅持不懈推進農村“廁所革命”,因地制宜、分類施策,推廣衛生廁所的大眾化、普及化,著力改善農村人居環境,努力補齊影響農民群眾生活品質的短板,推進美麗宜居鄉村建設。
客戶端系統應盡量減少資源的損耗,不用的資源應及時回收[6]。現在市場上的APP絕大多數都有清除緩存的功能。由于手機的存儲空間有限,用戶都希望能及時處理掉緩存數據。清除緩存功能就是將用戶數據文件夾和內存等中的非依賴數據清空。同樣地,CPU也需要及時處理掉一些后臺進程和服務,來減少資源的消耗。對返回鍵實行監聽,當用戶退出APP時及時銷毀活動(Activity)和一些服務(Service)。
安卓系統是基于Linux3.0發展起來的,所以,該系統的核心就已經集成了Linux的絕大多數特點[7]。而且,其中主要部分就涉及到安卓系統安全認證及網絡協議棧等等內容[8]。使APP和正方教務系統保持一致:用戶使用學校提供的教務賬號和密碼登錄,登陸時需要輸入驗證碼。APP提供修改密碼的功能,方便用戶及時修改密碼。用戶退出時及時清空后臺數據,增加權限管理等都可以提高APP的安全性。
if (result) {
HttpUtil.(url, params, new AsyncHttpResponseHandler() {
@Override
publicvoid onSuccess(int statusCode, Header[] headers,
byte[] responseBody) {
經過多次測試運行,統計出平均識別率,得到在不同像素分類情況下PNN的識別率。見表1。除此之外,在以上結論的前提下(10像素組擁有最佳的識別效果)與PNN神經網絡相似的BP神經網絡以及LVQ神經網絡也使用相同的特征矩陣進行了識別工作,與其進行了橫向對比。為了對比的公平,BP神經網絡和LVQ神經網絡將采用相同的10像素組特征矩陣進行訓練和分類。
try {
String content = new String(responseBody, "gb2312");
boolean result = manager.parseCourse(content);
重要功能的部分代碼與截圖
在產品技術要求的條件得以滿足的情況下,為減少產品生產成本,原材料和元器件同樣也要考慮其經濟合理性,選用最經濟合理的原材料和元器件。從而降低了設備的維護成本和運行成本。
prefUtil.setBoolean-KeyData("first_refreshcourse", true);
prefUtil.commit();
dialog.dismiss();
Intent i = new Intent(RefreshActivity.this,
合作學習是以小組為單位,小組成員按學習能力和學習成績的優、中、差三類搭配安排。小組討論形式的民主、寬松的氛圍,會觸發學生的創新思維,進而逐步形成創新意識。
CourseActivity. class);
初始時刻,直流端接入5 V低壓直流電,S1和S2開通,簡化的等效電路如圖5(a)所示。此時A相與C相同時開通,狀態方程為
} else {
dialog.dismiss();
Toast.(Re-----freshActivity.this, "未獲取到課表數據... !",
Toast.).show();
}
} catch (UnsupportedEncodingException e) {
dialog.dismiss();
e.printStackTrace();
}
}
@Override
publicvoid onFailure(int statusCode, Header[] headers,
byte[] responseBody, Throwable error) {
根據河道的實際情況以及景觀效果,于河道內設置了挺水植物栽培區,并對栽培的挺水植物類型進行如下設計:于河道周邊建設了面積為3800m2的挺水植物栽培區域,并選擇了千屈菜、蘆葦、梭魚草、黃花鳶尾以及花葉蘆竹等作為主要種植的挺水植物,針對所種植的水生植物進行系統化的管理,提高植物的成活性和生物量。同時,根據植物的生態位以及溫型,結合河道的環境條件對沉水植物的栽培品種進行了系統性的設計,并提前進行了試驗栽培工作,結果發現金魚藻、黑藻、苦草以及菹草等沉水植物可以良好適應河道環境。
dialog.dismiss();
11月,時至立冬,天氣漸涼。對于飽受花粉過敏折磨的患者來說,這無疑是個好時節,因為雜草類花粉隨著花期已過而消失殆盡,花粉癥患者終于不再有頻繁地打噴嚏、流涕、內耳刺癢等癥狀,也可以擺脫厚厚的口罩,輕裝出行。
Toast.(RefreshActivity.this, "課表獲取失敗... !",
Toast.).show();
byte[] responseBody) {
}
});
}
String content = new String(responseBody, "gb2312");
startActivity(i);
@Override
publicvoid onSuccess(int statusCode, Header[] headers,
Bushing軸套力是通過一種數學模型的方式,利用軟件設置彈性和阻尼來模擬幾個零件之間的連接關系,通過設置Bushing徑向剛度、軸向剛度和角剛度的數值來模擬軸承。由于軸承的阻尼很小,因此在本章中忽略不計。根據軸承類型選取位移剛度數值為Kx=1.84e5、Ky=1.84e5、Kz=2.6e5,選取的角度剛度數值為Kxx=1.4e5、Kyy=1.4e5、 Kzz=0[9]。
“是啊,如果我不逞英雄該多好!我也可以去辦公司賺錢,有空了陪你去北京游故宮登長城,去蒙古草原縱馬奔馳,到西北戈壁灘騎駱駝看沙漠日出日落……”
try {
各地區要成立由草原行政部門主要領導、分管領導參加的草原鼠災防治指揮部,夯實工作責任,認真組織落實草原鼠害防治工作;要結合當地實際制定項目實施方案,抓住關鍵時期和重點環節,細化防治目標和任務,提出資金使用意見,加強督促和指導,落實各項工作措施。
HttpUtil.(url, new AsyncHttpResponseHandler() {
1.從被動到主動,是社區自治的前提。社區居民要有主人翁的意識,通過爭當社區精英、熱心腸,在做事的過程中帶動更多的人參與,形成差序帶動格局。在主動服務的過程中形成內生獎懲機制,評選出“熱心阿姨”“好大哥”等光輝形象,對那些習慣于搭便車,享受了服務不干事、不配合的家庭或個人要透明、要曝光。
courseViewState = manager.ParseCourseViewState(content);
if (!courseViewState.is-Empty()) {
if (courseViewState. length() > 5) {
Message cour-seMsg = new Message();
courseMsg.wh--at =;
注意,以上推導未考慮體效應的影響,即假設所有N型MOS管的閾值電壓都相等。實際仿真過程中MOS管尺寸如表1。
handler.send-Message(courseMsg);
} else {
Toast.(RefreshActivity.this,
"系統繁忙,請稍后重試...", Toast.). show();
2) 運行費用估算:氧化藥劑費用100元/t,生化藥劑費用20元/t,電費30元/t,總計費用150 元 /t。
}
} else {
dialog.dismiss();
Toast.(Re-freshActivity.this, "系統繁忙,請稍后重試...",
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 設置界面

圖2 教務界面
綜上,南郵通達掌上校園APP主要實現了7個功能需求,基本滿足了本校學生學業管理的需求。開發掌上校園對于我們而言培養了動手能力和團隊意識;對于學校來說,掌上校園的開發是校園信息化建設的一個重要標志,為學校的信息發布、學生管理、教育教學創造了新的環境,改變了傳統的單向信息交流模式和管理方法,使學校成為一個真正的,便捷的“數字化校園”[9]。在實現的過程中我們也遇到過一些小問題,比如驗證碼圖片太小的問題、登錄重定向的問題等。不過最后這些問題都得到解決,到此APP基本完成。此外,在開發這款APP的時候選擇的應用模式也和傳統模式不一樣。應用模式由“基于計算機網絡和PC客戶端”模式轉向“基于計算機網絡和無線互聯網絡的PC機和各種手持智能設備終端作為客戶端”[10],這也是開發這款APP的意義所在——迎合時代變化潮流。但也還可以繼續深度開發:比如開發一個搶普通話考試的功能,解決普通話考試報名額度難搶的問題;比如開發一個一鍵好評、一鍵中評、一鍵差評和自選評價的功能來減輕每學期末輔導員和教師評價需要逐個點開的負擔。如果這些功能可以實現,便可以成為這款APP的閃光點。最后為了把這個 APP最到最好,能夠在學校推廣,設計了一個“加入我們”的功能,用來召集有興趣的同學進行深度開發,給APP注入新的活力。
[1] 王海峰. 基于Android技術校園信息平臺客戶端的研究與設計[J]. 軟件工程師, 2014(9): 43-45.
[2] 歐陽宏基. 等. 一種基于DAO設計模式與Hibernate框架的數據持久化層模型[J]. 微型計算機應用, 2009, 30(3): 36-37.
[3] 王強, 等. Web文檔清洗系統中HTML解析器的開發[J]. 計算機應用研究, 2002(2): 55-56.
[4] 盛雪豐. Android開發一大神器——Jsoup[J]. 電腦知識與技術, 2015(3): 63-65.
[5] 孫立偉, 等. 網絡爬蟲技術的研究[J]. 2010, 6(15): 4112-4113.
[6] 甘麗, 王雅婷. 基于Android系統的校園手機評教系統的設計與開發[J]. 通化師范學院學報(自然科學), 2013, 34(4): 39-41.
[7] 朱婷婷. 基于Android平臺的PKM軟件的研究與設計[D]. 浙江師范大學, 2012.
[8] 詹凱. 基于安卓操作系統的應用軟件開發分析[J]. 通訊世界, 2016, 262(2): 262-263.
[9] 謝杭, 等. 基于安卓平臺的掌上校園APP的設計與開發. 軟件工程, 2016, 19(3): 24-25.
[10] 王超, 等. 基于安卓的掌上校園客戶端設計初探[J]. 電子技術與軟件工程, 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
南郵通達學院2017年大學生科技創新訓練計劃(STITP):基于Android的南郵通達掌上校園APP(項目編號CX66617016)
姚永明(1987-),男,西安郵電大學計算機學院碩士研究生,主要從事數字圖像處理研究和軟件工程;章香(1997-),女,南京郵電大學通達學院本科生,研究方向物聯網;姚永瑞(1997-),男,南京郵電大學通達學院本科生,研究方向物聯網。
梅雨凱(1995-),男,南京郵電大學通達學院本科生,研究方向物聯網和軟件工程。
本文著錄格式:姚永明,梅雨凱,章香,等. 基于安卓的南郵通達掌上校園APP的實現[J]. 軟件,2018,39(8):48-51