殷西祥 王康康
(安徽商貿(mào)職業(yè)技術(shù)學(xué)院電子信息工程系, 安徽 蕪湖 241002)
考生為了填報(bào)一個(gè)適合自己的高校,需要全面了解高校的情況。考生及其家長(zhǎng)一般會(huì)去瀏覽各個(gè)高校的網(wǎng)站,通過(guò)收集分析和比較這些網(wǎng)站上發(fā)布的信息,來(lái)選擇自己適合報(bào)考的學(xué)校。網(wǎng)絡(luò)上的高校網(wǎng)站是獨(dú)立而分散的,考生要一個(gè)一個(gè)地去搜索查看各個(gè)高校的網(wǎng)站,既費(fèi)時(shí)又費(fèi)力,而且還未必能夠順利地找到自己需要的或?qū)ψ约河杏玫男畔?。為了方便考生及其家長(zhǎng)獲取各個(gè)高校的有關(guān)信息,同時(shí)也為了方便高校進(jìn)行招生宣傳,我們研究設(shè)計(jì)了基于Android平臺(tái)的招生宣傳系統(tǒng)。
我們?cè)O(shè)計(jì)的這個(gè)招生宣傳系統(tǒng),將各個(gè)高校的招生信息進(jìn)行匯總和處理,以簡(jiǎn)潔方便的形式予以展示,有助于考生快捷地搜索獲取自己需要的信息。
該系統(tǒng)包括服務(wù)端和客戶(hù)端2個(gè)部分。服務(wù)端與客戶(hù)端通過(guò)http協(xié)議實(shí)現(xiàn)JSON數(shù)據(jù)交互。系統(tǒng)采用MVP模式和Material design設(shè)計(jì)風(fēng)格,使用okhttp網(wǎng)絡(luò)框架實(shí)現(xiàn)與服務(wù)端進(jìn)行請(qǐng)求交互。開(kāi)發(fā)環(huán)境為:Android Studi2.3.3.0,eclipse-jee-neon-3-win32-x86_64;數(shù)據(jù)庫(kù)采用Mysql 5.7;輔助開(kāi)發(fā)工具為Adobe Photoshop CS6等[1]。
系統(tǒng)的服務(wù)端包含用戶(hù)權(quán)限管理模塊、學(xué)校管理模塊、專(zhuān)業(yè)管理模塊和招生信息管理模塊等,為Android客戶(hù)端的數(shù)據(jù)顯示完成基礎(chǔ)數(shù)據(jù)獲取和交互等功能。在系統(tǒng)的Android客戶(hù)端,用戶(hù)通過(guò)注冊(cè)登錄,可以瀏覽從服務(wù)器返回的學(xué)校招生信息、學(xué)校專(zhuān)業(yè)介紹、專(zhuān)業(yè)招生和話題等模塊(見(jiàn)圖1)。其中,話題模塊類(lèi)似于BBS,可以發(fā)布或回復(fù)用戶(hù)感興趣的主題。
圖1 系統(tǒng)的功能模塊
招生宣傳系統(tǒng)分為服務(wù)端和Android客戶(hù)端,由管理員進(jìn)行數(shù)據(jù)管理,用戶(hù)通過(guò)Android端查看。系統(tǒng)根據(jù)用戶(hù)的選擇,顯示對(duì)用戶(hù)有價(jià)值的數(shù)據(jù)。系統(tǒng)數(shù)據(jù)管理方便、靈活,數(shù)據(jù)進(jìn)行加密,保證數(shù)據(jù)的安全性。系統(tǒng)界面簡(jiǎn)潔美觀,操作簡(jiǎn)單??蛻?hù)端和服務(wù)端系統(tǒng)的活動(dòng)如圖2和圖3所示。
圖2 Android端系統(tǒng)活動(dòng)圖
圖3 服務(wù)端系統(tǒng)活動(dòng)圖
根據(jù)面向?qū)ο蟮脑O(shè)計(jì)方法,需要設(shè)計(jì)好系統(tǒng)的數(shù)據(jù)庫(kù),根據(jù)數(shù)據(jù)庫(kù)中的表來(lái)聚合成各項(xiàng)功能。在明確系統(tǒng)功能后,確定系統(tǒng)中的各個(gè)實(shí)體。通過(guò)分析實(shí)體之間的關(guān)系,生成相應(yīng)的數(shù)據(jù)表;每張表都能很好地表述相應(yīng)的實(shí)體。表與表之間相互約束,保證數(shù)據(jù)的一致性、完整性。
該系統(tǒng)創(chuàng)建的數(shù)據(jù)表有:用戶(hù)表、學(xué)校表、系部表、專(zhuān)業(yè)表、專(zhuān)業(yè)內(nèi)容表、話題表、話題評(píng)價(jià)表、招生資訊表、用戶(hù)關(guān)注學(xué)校表。系統(tǒng)E-R模型如圖4所示。其中,學(xué)校表、話題評(píng)論表和話題表,受用戶(hù)表的用戶(hù)編號(hào)字段約束;系部表,受學(xué)校表的學(xué)校編號(hào)字段約束;專(zhuān)業(yè)表,受系部表系部編號(hào)字段約束;專(zhuān)業(yè)內(nèi)容表,受系部表的系部編號(hào)字段和專(zhuān)業(yè)編號(hào)字段約束;話題評(píng)論表,受話題表的話題編號(hào)字段約束;招生資訊表,受學(xué)校表的學(xué)校編號(hào)約束;用戶(hù)關(guān)注學(xué)校表,受學(xué)校表的學(xué)校編號(hào)字段和用戶(hù)表的用戶(hù)編號(hào)字段約束。
服務(wù)端提供用戶(hù)登錄、用戶(hù)注冊(cè)、獲取招生信息、獲取學(xué)校信息等接口。Android客戶(hù)端通過(guò)網(wǎng)絡(luò)請(qǐng)求以JSON數(shù)據(jù)格式與服務(wù)端進(jìn)行數(shù)據(jù)交互,實(shí)現(xiàn)用戶(hù)登錄、注冊(cè)、查看招生信息、學(xué)校信息等功能。
登錄界面布局,使用FrameLayout。在界面中心位置是ProgressBar控件,默認(rèn)設(shè)置為隱藏狀態(tài)。當(dāng)用戶(hù)點(diǎn)擊登錄發(fā)起網(wǎng)絡(luò)請(qǐng)求時(shí),該進(jìn)度條出現(xiàn),給用戶(hù)友好提示;當(dāng)網(wǎng)絡(luò)請(qǐng)求完成,該進(jìn)度條則回到隱藏狀態(tài)。用戶(hù)名和密碼輸入框使用TextInputLayout包裹,點(diǎn)擊時(shí),提示文本會(huì)移動(dòng)到輸入框的左上角,并有字體相應(yīng)變小的效果。在密碼輸入框設(shè)置passwordToggleEnabled屬性,讓其密碼實(shí)現(xiàn)正常文本和密文的相互轉(zhuǎn)換。
用戶(hù)輸入用戶(hù)名和密碼,點(diǎn)擊登錄按鈕發(fā)起網(wǎng)絡(luò)請(qǐng)求,系統(tǒng)通過(guò)okhttp3網(wǎng)絡(luò)框架與服務(wù)端進(jìn)行JSON數(shù)據(jù)交互,核對(duì)信息是否正確。如果不正確,服務(wù)器返回錯(cuò)誤信息,以對(duì)話框的形式顯示給用戶(hù)。如果正確,則跳轉(zhuǎn)到選擇關(guān)注學(xué)校界面,并將用戶(hù)的信息用SharedPreferences進(jìn)行保存。用戶(hù)選擇好自己關(guān)注的學(xué)校,點(diǎn)擊確定,進(jìn)入主界面。
采用ListView顯示學(xué)校列表。每一個(gè)ListView的條目,由TextView和Button組成。TextView顯示學(xué)校名稱(chēng),用戶(hù)點(diǎn)擊Button,會(huì)改變Button顏色和字的內(nèi)容,以此表述關(guān)注該學(xué)校和取消關(guān)注的狀態(tài)。
在Activity的onCreate中,向服務(wù)器發(fā)起網(wǎng)絡(luò)請(qǐng)求,獲取服務(wù)器端的學(xué)校列表,填充到ListView的適配器中。當(dāng)學(xué)校列表獲取成功,則根據(jù)用戶(hù)向服務(wù)器發(fā)起的請(qǐng)求,查詢(xún)用戶(hù)已經(jīng)關(guān)注過(guò)的學(xué)校,并改變學(xué)校列表中該學(xué)校的關(guān)注狀態(tài)。用戶(hù)點(diǎn)擊確定,進(jìn)入主界面后,系統(tǒng)將用戶(hù)關(guān)注的學(xué)校用SharedPreferences進(jìn)行保存。效果如圖5所示。
圖4 系統(tǒng) E-R模型圖
主頁(yè)界面設(shè)計(jì),使用BottomNavigationView和Fragment及ViewPager的配合,實(shí)現(xiàn)底部導(dǎo)航,左右切換的效果。底部導(dǎo)航分別為首頁(yè)、學(xué)校介紹、話題、個(gè)人中心。首頁(yè)界面采用ListView以列表的方式展示招生信息,頂部通過(guò)ListtView的addHeaderView方法,添加一個(gè)輪播的視圖。輪播圖使用ViewPager加 PagerAdapter,實(shí)現(xiàn)其效果(如圖6)。
在用戶(hù)點(diǎn)擊某個(gè)招新信息時(shí),可跳轉(zhuǎn)到相應(yīng)的招新信息詳情頁(yè)。招新信息詳情頁(yè)的內(nèi)容是后臺(tái)通過(guò)富文本編輯器保存的html文件,通過(guò)WebView進(jìn)行顯示。為了減少用戶(hù)等待內(nèi)容的加載時(shí)間,內(nèi)容顯示先加載文字,等文字顯示在頁(yè)面上之后再加載圖片。
學(xué)校類(lèi)列表頁(yè)采用GridView,每行兩列。解析SharedPreferences中的用戶(hù)關(guān)注的學(xué)校信息,使用CardView以卡片的形式展示相應(yīng)信息(見(jiàn)圖7)。
功能實(shí)現(xiàn):卡片上展示獲取到的學(xué)校圖片和學(xué)校名稱(chēng)。學(xué)校的標(biāo)志性圖片是通過(guò)Glide加載服務(wù)器返回的圖片地址。Glide是一個(gè)很好的圖片加載庫(kù),加載圖片非常流暢。點(diǎn)擊卡片,可以進(jìn)入學(xué)校的專(zhuān)業(yè)介紹和學(xué)校風(fēng)景頁(yè)。
RecycleView是Android 5.0之后的新控件[2-3],其對(duì)View的復(fù)用和回收有很好的效果。Recycle-View配合LayoutManager,可以很好地控制布局方式。話題界面使用RecyclerView配合LayoutManager,以線性布局的方式展示用戶(hù)發(fā)布的話題。
圖5 學(xué)校關(guān)注界面
圖6 首頁(yè)界面
圖7用戶(hù)關(guān)注的學(xué)校列表頁(yè)
點(diǎn)擊每個(gè)話題條目,可以查看該話題的評(píng)論。在界面的右下角有一個(gè)懸浮按鈕,使用FloatingActionButton控件實(shí)現(xiàn)。用戶(hù)點(diǎn)擊按鈕,可以增加話題,供大家討論。為使該懸浮按鈕不影響用戶(hù)查看話題列表,設(shè)置了RecyclerView的滑動(dòng)時(shí)間。當(dāng)用戶(hù)上下滑動(dòng)時(shí),隱藏懸浮按鈕;停止滑動(dòng)時(shí),懸浮按鈕出現(xiàn)。
個(gè)人中心界面的整體布局,采用線性布局方式。頂部讀取SharedPreferences中保存的用戶(hù)信息,展示用戶(hù)頭像和用戶(hù)名,點(diǎn)擊會(huì)跳轉(zhuǎn)到用戶(hù)信息的詳情頁(yè)。頁(yè)面中的功能列表,采用ListView實(shí)現(xiàn)。用戶(hù)可以查看自己關(guān)注的學(xué)校、發(fā)布的話題等。用戶(hù)還可以查看該軟件的一些信息。
用戶(hù)可以在此頁(yè)面點(diǎn)擊“我的關(guān)注”,查詢(xún)到自己關(guān)注的學(xué)校信息;點(diǎn)擊“我的話題”,可以瀏覽自己發(fā)過(guò)的話題,并管理自己發(fā)布的話題;在“我的收藏”中,用戶(hù)可以查看自己以前在該系統(tǒng)中收藏的文章;在“我的消息”中,可以查詢(xún)系統(tǒng)給用戶(hù)推送的消息;在“關(guān)于”中,可以查看該系統(tǒng)的一些版本信息。
上面介紹的基于Android平臺(tái)的招生宣傳系統(tǒng),采用MVP模式和Material design設(shè)計(jì)風(fēng)格,使用okhttp3網(wǎng)絡(luò)框架實(shí)現(xiàn)與服務(wù)端通過(guò)JSON數(shù)據(jù)進(jìn)行信息交互。使用該系統(tǒng),有助于高校的招生宣傳工作實(shí)現(xiàn)無(wú)紙化,也方便了用戶(hù)的信息獲取。該系統(tǒng)的后期建設(shè),可以進(jìn)一步對(duì)服務(wù)器端進(jìn)行相關(guān)的功能升級(jí),如使用第三方推送平臺(tái)完成用戶(hù)關(guān)注學(xué)校的信息推送等,為用戶(hù)提供更加個(gè)性化的和更深層次的服務(wù)。