李 涵 崔梓超
基于Android系統(tǒng)的運(yùn)動(dòng)場(chǎng)所預(yù)定軟件
李 涵 崔梓超
本課題在Android系統(tǒng)下設(shè)計(jì)實(shí)現(xiàn)體育場(chǎng)館預(yù)定軟件,利用該軟件解決人們?cè)谶\(yùn)動(dòng)時(shí)遇到的場(chǎng)館等位問題。利用該軟件可以清晰地看到場(chǎng)館在不同時(shí)間段的預(yù)訂情況,從而可以實(shí)際情況選擇自己運(yùn)動(dòng)的時(shí)間段和場(chǎng)館。該系統(tǒng)分為后臺(tái)模塊、網(wǎng)絡(luò)模塊、圖片加載等模塊。后臺(tái)模塊是基于Sqlite和Node實(shí)現(xiàn)的,充當(dāng)倉庫管理的角色;網(wǎng)絡(luò)模塊是一個(gè)基于接口實(shí)現(xiàn)的框架;圖片加載模塊是一個(gè)基于LruCache的在線圖片加載框架。系統(tǒng)具備用戶登錄、注冊(cè)功能、查詢場(chǎng)館信息,在某一時(shí)間段預(yù)定場(chǎng)館位置的功能,用戶還可以對(duì)場(chǎng)館預(yù)定訂單進(jìn)行管理。
目前已經(jīng)成為主流的Android操作系統(tǒng),不止深受大眾的喜愛,而且也逐漸成為了開發(fā)者的首選。主要原因,就是因?yàn)锳ndroid系統(tǒng)的開源性。在我國,隨著城市化的進(jìn)展,體育場(chǎng)館越來越多,而人們常為無法在運(yùn)動(dòng)時(shí)準(zhǔn)確地選擇有空位的體育館而煩惱。因此,開發(fā)一個(gè)場(chǎng)館預(yù)定助手軟件就顯得十分必要,這可以大大減少人們?cè)谶\(yùn)動(dòng)時(shí)消耗在等位上的時(shí)間。
本課題基于Android系統(tǒng),設(shè)計(jì)實(shí)現(xiàn)了一款體育館運(yùn)動(dòng)場(chǎng)地預(yù)訂軟件。通過該軟件,用戶可以查看已注冊(cè)的體育館各類運(yùn)動(dòng)場(chǎng)地的使用和預(yù)訂情況,并能夠在手機(jī)客戶端預(yù)訂指定時(shí)間段的指定運(yùn)動(dòng)場(chǎng)地。軟件系統(tǒng)具備如下幾個(gè)模塊:
1.用戶管理模塊:進(jìn)行用戶的注冊(cè)、登錄以及個(gè)人信息的管理工作;
2.運(yùn)動(dòng)場(chǎng)地查詢模塊:通過手機(jī)客戶端,用戶可以查詢指定體育館的指定運(yùn)動(dòng)場(chǎng)地使用情況和空閑信息,如羽毛球場(chǎng)地、乒乓球場(chǎng)地、籃球場(chǎng)等;
3.用戶訂單管理模塊:通過手機(jī)客戶端,用戶可以查看已經(jīng)下達(dá)的場(chǎng)地預(yù)訂情況,或進(jìn)行訂單修改、訂單取消等管理工作;
4.后臺(tái)服務(wù)器管理模塊:用于存放注冊(cè)用戶信息,歷史訂單信息等。
功能劃分
本課題設(shè)計(jì)的這款場(chǎng)館預(yù)定軟件的功能如圖1所示。
其中,注冊(cè)登錄功能包括:
(1)用戶注冊(cè):用戶可以通過申請(qǐng)用戶名,密碼來注冊(cè)。每個(gè)用戶名唯一。
(2)用戶登錄:用戶可以根據(jù)申請(qǐng)的用戶名,密碼來登錄。
場(chǎng)館預(yù)定功能包括
(1)場(chǎng)館預(yù)定:用戶在登錄后可以對(duì)自己選中的場(chǎng)館根據(jù)所在時(shí)間段進(jìn)行預(yù)定。
(2)場(chǎng)館查詢:用戶可以在登錄后查詢體育場(chǎng)館的時(shí)間段位空閑和已經(jīng)被預(yù)定過的時(shí)間段。
圖1 功能圖
圖2 系統(tǒng)流程圖
系統(tǒng)設(shè)計(jì)流程
本款A(yù)PP軟件的整個(gè)流程如圖2所示。
當(dāng)使用者開啟APP之后首先進(jìn)入到的是登錄/注冊(cè)界面,第一次進(jìn)入的用戶需要注冊(cè)自己的賬號(hào),如果已有賬號(hào)的用戶可以直接登錄。登錄后可以看到場(chǎng)館信息列表,點(diǎn)擊場(chǎng)館列表中的某一個(gè)條目可以進(jìn)入場(chǎng)館列表的詳細(xì)信息并看到該場(chǎng)館可以預(yù)定的時(shí)間段,只可以預(yù)定未被預(yù)定的時(shí)間段??梢渣c(diǎn)擊訂單管理按鈕管理自己預(yù)定過的訂單列表,點(diǎn)擊取消預(yù)定即會(huì)取消用戶所下訂單并進(jìn)入場(chǎng)館信息列表。
圖3 網(wǎng)絡(luò)請(qǐng)求框架圖
關(guān)鍵技術(shù)
(1)網(wǎng)絡(luò)請(qǐng)求設(shè)計(jì)
本軟件的網(wǎng)絡(luò)請(qǐng)求結(jié)構(gòu)采用異步網(wǎng)絡(luò)請(qǐng)求框架并進(jìn)行優(yōu)化,更加符合本軟件中每次頁面切換和不同訂單詳情返回信息時(shí)請(qǐng)求量小,通信頻繁的網(wǎng)絡(luò)操作。針對(duì)Android 2.3以上的系統(tǒng)才用基于 HttpURLConnection的網(wǎng)絡(luò)請(qǐng)求,Android 2.3以下系統(tǒng)才用基于 HttpClient 實(shí)現(xiàn)的網(wǎng)絡(luò)請(qǐng)求,使得網(wǎng)絡(luò)的Android應(yīng)用程序更容易,最重要的是,速度更快。
整個(gè)網(wǎng)絡(luò)請(qǐng)求框架總體設(shè)計(jì)如圖3所示。
上面是網(wǎng)絡(luò)架構(gòu)的總體示意圖,整個(gè)網(wǎng)絡(luò)請(qǐng)求Request通過Dispatch分發(fā)線程進(jìn)入請(qǐng)求隊(duì)列,然后在根據(jù)是存放在硬盤/內(nèi)存調(diào)用不同的Data接口實(shí)現(xiàn)。此框架具有以下優(yōu)點(diǎn):
自動(dòng)調(diào)度網(wǎng)絡(luò)請(qǐng)求。
多個(gè)并發(fā)的網(wǎng)絡(luò)連接。
透明的磁盤和內(nèi)存響應(yīng)緩存使用標(biāo)準(zhǔn)的HTTP緩存一致性。
支持請(qǐng)求優(yōu)先級(jí)。
取消請(qǐng)求的API。您可以取消一個(gè)請(qǐng)求,也可以設(shè)置請(qǐng)求取消的塊或范圍。
緩解的定制,例如,用于重試和退避。
強(qiáng)大的排序,可以很容易正確填寫您的UI與異步的數(shù)據(jù)從網(wǎng)絡(luò)獲取。
調(diào)試和跟蹤工具。
(2)圖片加載框架設(shè)計(jì)
Android手機(jī)中加載圖片的原理是一個(gè)點(diǎn)一個(gè)點(diǎn)加載的(分辨率),通常加載這類數(shù)據(jù)都會(huì)在內(nèi)存中創(chuàng)建一個(gè)二維數(shù)組,數(shù)組中的每一項(xiàng)代表一個(gè)點(diǎn),每一個(gè)點(diǎn)又是由ARGB組成,每個(gè)色素占4個(gè)Byte,所以一張3776 * 2520分辨率的圖片加載到內(nèi)存中需要消耗的內(nèi)存為:3776 * 2520 * 4byte = 38062080Byte。由此算來,大約需要38Mb內(nèi)存才能加載這張圖片,這樣大的內(nèi)存空間對(duì)移動(dòng)設(shè)備來說非常容易造成內(nèi)存溢出異常(oom)。而且對(duì)于移動(dòng)設(shè)備而言,哪怕加載能成功那么大的內(nèi)存也是一種浪費(fèi)(屏幕分辨率限制)。
圖4 圖片加載框架
所以Android系統(tǒng)本身給我們預(yù)留了一個(gè)位圖加載的信息類BitmapFactory.Options對(duì)象,BitmapFactory. Options為BitmapFactory的一個(gè)內(nèi)部類,它主要用于設(shè)定與存儲(chǔ)BitmapFactory加載圖片的一些信息。根據(jù)屏幕尺寸或者規(guī)定尺寸壓縮像素點(diǎn)使圖片從而避免像素?cái)?shù)組全部加載到內(nèi)存中,防止內(nèi)存溢出,有效利用內(nèi)存空間。本系統(tǒng)將其封裝為一個(gè)整體框架,并為其專門劃分一個(gè)HttpStack用來請(qǐng)求網(wǎng)絡(luò)。圖片加載框架總體設(shè)計(jì)如圖4所示。
上面的結(jié)構(gòu)中,ImageLoader是所有方法的封裝類,可以通過初始化調(diào)用方法,整個(gè)庫分為ImageLoaderEngine,Cache及ImageDownloader,ImageDecoder,BitmapDisplayer,BitmapProcessor五大模塊,其中Cache分為MemoryCache和DiskCache兩部分。ImageLoader收到加載及顯示圖片的任務(wù),并將它交給ImageLoaderEngine,ImageLoaderEngine分發(fā)任務(wù)到具體線程池去執(zhí)行,任務(wù)通過Cache及ImageDownloader獲取圖片,中間可能經(jīng)過BitmapProcessor和ImageDecoder處理,最終轉(zhuǎn)換為Bitmap交給BitmapDisplayer在ImageAware中顯示。整個(gè)函數(shù)流程如圖5所示。
軟件運(yùn)行后,首先進(jìn)入用戶登錄界面。登錄界面有2個(gè)文本輸入框,輸入正確用戶名后方可登錄,否則提示:用戶名或密碼錯(cuò)誤,請(qǐng)重新輸入。如圖6。
圖6 登錄界面
圖7 場(chǎng)館展示列表界面
圖8 場(chǎng)館詳情界面
圖9 場(chǎng)館預(yù)定列表界面
圖10 歷史訂單詳情界面
圖5 DisplayBitmapTask流程圖
登錄成功后,進(jìn)入場(chǎng)館展示列表頁面,這里放置了對(duì)應(yīng)展示場(chǎng)館信息和所在地,點(diǎn)擊圖片會(huì)以圓形慢慢擴(kuò)散、底部緩緩彈出詳情頁面。場(chǎng)館詳情頁面的上部是場(chǎng)館的圖片,下面是場(chǎng)館的介紹,然后有一個(gè)浮動(dòng)按鈕,點(diǎn)擊之后會(huì)進(jìn)入這個(gè)場(chǎng)館的預(yù)定頁面。如圖7和圖8所示。
在場(chǎng)館預(yù)定列表界面中會(huì)顯示出場(chǎng)館的不同預(yù)定時(shí)間段,點(diǎn)擊之后如果下單成功會(huì)提示“下單成功”,如果失敗會(huì)根據(jù)失敗原因提示,如:“該時(shí)間段已被預(yù)定”或“該時(shí)間段不營業(yè)”。 如圖9所示。
在歷史訂單詳情頁中,可以查看用戶所有下單成功的頁面。長(zhǎng)按,則過往訂單會(huì)彈出窗口,詢問是否取消訂單,如果取消訂單,則會(huì)提示“取消成功”。并返回上一級(jí)頁面。如圖10所示。
本課題在Android系統(tǒng)上設(shè)計(jì)實(shí)現(xiàn)了一款體育館運(yùn)動(dòng)場(chǎng)地預(yù)定軟件。通過該軟件APP,用戶可以查看已注冊(cè)的體育館各類運(yùn)動(dòng)場(chǎng)地的使用和預(yù)定情況,并能夠在手機(jī)客戶端查看已經(jīng)下達(dá)的場(chǎng)地預(yù)定情況,或進(jìn)行訂單修改、訂單取消等管理工作。通過該軟件的使用,可以減少人們?cè)谶\(yùn)動(dòng)時(shí)消耗在等位上的時(shí)間,方便用戶使用。
10.3969/j.issn.1001-8972.2015.21.019