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