劉榮 袁嵩 金鳴
摘要:隨著地圖應(yīng)用的發(fā)展、互聯(lián)網(wǎng)技術(shù)的提升,各種地圖的衍生應(yīng)用得到普及。利用移動(dòng)互聯(lián)網(wǎng)技術(shù),結(jié)合百度地圖API、MVC架構(gòu)設(shè)計(jì)了一款基于Android平臺(tái)的代買代送移動(dòng)應(yīng)用系統(tǒng),給出了系統(tǒng)架構(gòu)、系統(tǒng)功能、系統(tǒng)數(shù)據(jù)庫(kù)設(shè)計(jì),重點(diǎn)闡述了系統(tǒng)實(shí)現(xiàn)的視圖模塊、控制模塊和數(shù)據(jù)模塊三大模塊。
關(guān)鍵詞:Android;MVC;百度地圖API
中圖分類號(hào):TP302.1 文獻(xiàn)標(biāo)識(shí)碼:A 文章編號(hào):1009-3044(2018)13-0081-04
Design and Implementation of Buy-and-Run Delivery System Based on Android Platform
LIU Rong, YUAN Song, JIN Ming
(College of Computer Science and Technology Wuhan University of Science and Technology, Wuhan 430065, China)
Abstract: With the development of map applications and the advancement of Internet technologies, various map derivative applications have become popular. Using mobile Internet technology, combined with Baidu Maps API, MVC architecture to design a mobile application system based on the Android platform, gives the system architecture, system functions, system database design, focusing on the system to achieve the view module, Control module and data module three major modules.
Key words: Android; MVC; Baidu Maps API
1 背景
隨著移動(dòng)互聯(lián)網(wǎng)的不斷發(fā)展以及百度、高德等地圖平臺(tái)開放接口的提供以及移動(dòng)設(shè)備的普及,應(yīng)用市場(chǎng)上涌現(xiàn)出一大批地圖應(yīng)用衍生的移動(dòng)應(yīng)用[1],涵蓋了人們?nèi)粘I畹母鱾€(gè)方面,帶給了人們極大的便利,并且完成了從方便生活到引導(dǎo)生活的華麗轉(zhuǎn)型[2]。為了達(dá)到共享時(shí)間、共享交通設(shè)備、便捷生活的目的,共享單車穿梭于街頭;各種順風(fēng)車流行市場(chǎng);airbnb共享房屋橫掃全球。基于移動(dòng)平臺(tái)的代買代送應(yīng)用逐漸彰顯出其重要性。通過(guò)基于移動(dòng)平臺(tái)的代買代送應(yīng)用,人們可以充分利用碎片時(shí)間,順手完成其他人發(fā)布的代買代送等任務(wù),并獲得一定報(bào)酬,實(shí)現(xiàn)雙方的互利互惠。該文基于Android平臺(tái),利用百度地圖API以及MVC架構(gòu)設(shè)計(jì)并實(shí)現(xiàn)了一款代買代送應(yīng)用系統(tǒng)。
2 系統(tǒng)設(shè)計(jì)
2.1 系統(tǒng)架構(gòu)
該系統(tǒng)基于Android平臺(tái),使用MySQL數(shù)據(jù)庫(kù)管理系統(tǒng),將數(shù)據(jù)庫(kù)放在服務(wù)端,Android端通過(guò)向服務(wù)端發(fā)送請(qǐng)求在服務(wù)端對(duì)數(shù)據(jù)庫(kù)進(jìn)行增刪查改,服務(wù)端再將結(jié)果傳回Android端。系統(tǒng)架構(gòu)如圖1所示。
2.2 系統(tǒng)功能
該系統(tǒng)提倡服務(wù)者根據(jù)自己的行程安排,隨程代買、代送、代取、代排隊(duì)。系統(tǒng)主要包括用戶管理、訂單管理、費(fèi)用管理、地圖管理、評(píng)論管理五個(gè)模塊。用戶通過(guò)該系統(tǒng)Android客戶端可以進(jìn)行發(fā)布代買代送任務(wù)訂單、申請(qǐng)成為服務(wù)者、接受訂單、查看訂單、評(píng)價(jià)訂單等操作。系統(tǒng)功能結(jié)構(gòu)圖如圖2所示。
2.3 系統(tǒng)數(shù)據(jù)庫(kù)設(shè)計(jì)
數(shù)據(jù)庫(kù)設(shè)計(jì)如圖3所示。
2.4 系統(tǒng)主要業(yè)務(wù)流程
該系統(tǒng)的主要業(yè)務(wù)流程如圖4所示(以代送流程為例):用戶發(fā)布代買代送服務(wù)訂單之后,系統(tǒng)根據(jù)定位信息向周圍服務(wù)者推送訂單,服務(wù)者接單之后,如果雙方都不取消訂單則業(yè)務(wù)正常進(jìn)行直至物品交接訂單完成。如果服務(wù)者接單之后,用戶取消訂單申請(qǐng)退款則需與服務(wù)者協(xié)商取得同意之后方可成功取消訂單;服務(wù)者取消訂單會(huì)向發(fā)單用戶發(fā)送提示,但不必經(jīng)過(guò)發(fā)單用戶的同意就可以成功取消訂單。
圖4 代送業(yè)務(wù)流程圖
3 系統(tǒng)實(shí)現(xiàn)
3.1 系統(tǒng)技術(shù)說(shuō)明
該系統(tǒng)Android端基于Android Studio開發(fā)平臺(tái),按照MVC架構(gòu)將系統(tǒng)劃分為視圖模塊、控制模塊和數(shù)據(jù)模塊三大模塊。Android端利用HttpUtils工具類請(qǐng)求網(wǎng)絡(luò)成功后,視圖模塊通過(guò)控制模塊將數(shù)據(jù)封裝并發(fā)送給服務(wù)端,實(shí)現(xiàn)與服務(wù)端的通信,數(shù)據(jù)模塊采用輕量級(jí)數(shù)據(jù)格式JSON創(chuàng)建交互數(shù)據(jù)模型。此外,Android端還導(dǎo)入了百度地圖SDK,利用百度地圖API提供的相關(guān)方法實(shí)現(xiàn)地址管理模塊的位置共享、地圖定位等功能。
3.2 視圖模塊
視圖模塊定義應(yīng)用界面和用戶觸發(fā)的接口,包括設(shè)計(jì)用戶管理、訂單管理、費(fèi)用管理、地址管理和費(fèi)用管理等功能模塊的交互界面,力求達(dá)到用戶界面友好,事件響應(yīng)迅速的標(biāo)準(zhǔn)。通過(guò)定義XML文件來(lái)設(shè)計(jì)用戶界面的效率高,便于代碼理解和重用 [3]。因此該系統(tǒng)Android端通過(guò)XML文件實(shí)現(xiàn)界面布局,再在Activity中為布局中各控件綁定監(jiān)聽事件并通過(guò)服務(wù)與相應(yīng)活動(dòng)綁定。
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.register);
initViewRegister();//初始化界面控件
}
private void initViewRegister(){
setContentView(R.layout.register);
register_do=(Button)findViewById(R.id.register_do);
register_do.setOnClickListener(this);
}
public void onClick(View v) {
register();
}
3.3 控制模塊
控制模塊主要負(fù)責(zé)處理用戶請(qǐng)求,將數(shù)據(jù)封裝發(fā)送給服務(wù)器,并將服務(wù)器返回的數(shù)據(jù)進(jìn)行解析,最后通過(guò)視圖模塊顯示給用戶。例如用戶登錄時(shí),Android端將從視圖中獲取的用戶信息進(jìn)行封裝,發(fā)送給服務(wù)端,服務(wù)端對(duì)接收到的數(shù)據(jù)進(jìn)行處理并將結(jié)果返回給Android端,Android端再對(duì)接收的處理結(jié)果進(jìn)行解析,根據(jù)解析結(jié)果判斷用戶是否能夠登錄系統(tǒng)。
private UserDAO userDAO=new UserDAO();
private void login() {
// 獲取用戶輸入的賬號(hào)和密碼
final String phone = login_phone.getText().toString().trim();
String password = login_psd.getText().toString().trim();
try {
Boolean aBoolean = userDAO.Login(phone,password);
if(aBoolean){
//成功登錄...
}else{
//登錄失敗
}
} catch (IOException e) {
e.printStackTrace();
} catch (NETWorkException e) {
//...
}
}
UserDAO.java中:
public Boolean Login(String username,String password) throws
IOException,NETWorkException{
final String[] result = new String[1];
// 創(chuàng)建hashmap的集合,用來(lái)攜帶參數(shù)
final HashMap
// 給hashmap賦值
paramsMap.put("phone",username);
paramsMap.put("password",password);
// 開啟子線程訪問(wèn)網(wǎng)絡(luò)
new Thread() {
public void run() {
try {
result[0] =new HttpUtils().doPost(LOGIN,paramsMap);
} catch (IOException e) {
e.printStackTrace();
} catch (NETWorkException e) {
e.printStackTrace();
}
}
}.start();
if(result[0]==null) {
return false;
}
else {
User user = JsonUtils.parseUser(result[0]);
Been.username = user.getUsername();
Been.password = user.getPassword();
//...
}
return true;
}
3.4 數(shù)據(jù)模塊
數(shù)據(jù)模塊,采用輕量級(jí)數(shù)據(jù)格式JSON,創(chuàng)建交互數(shù)據(jù)模型。為了數(shù)據(jù)安全以及降低Android端應(yīng)用所占手機(jī)內(nèi)存,該系統(tǒng)并未使用Android Studio自帶的SQLite數(shù)據(jù)庫(kù),而是使用Mysql數(shù)據(jù)庫(kù)管理系統(tǒng),Android端不直接參與數(shù)據(jù)庫(kù)操作,而是將指令信息封裝成JSON格式數(shù)據(jù)發(fā)送到服務(wù)端,通過(guò)服務(wù)端間接地對(duì)數(shù)據(jù)庫(kù)進(jìn)行增刪查改。
public Boolean Register(User user) throws IOException,NETWorkException{
final String[] result = new String[1];
final Map
JSONObject jsonObject=new JSONObject();
try {
jsonObject.put("username", user.getUsername());
//將數(shù)據(jù)封裝成JSON格式...
} catch (JSONException e) {
e.printStackTrace();
}
final String str=jsonObject.toString();
param.put("Json",str);
new Thread() { // 開啟線程,訪問(wèn)網(wǎng)絡(luò)數(shù)據(jù)
public void run() {
try {
result[0] =new HttpUtils().doPost(REGISTER,param);
} catch (IOException e) {
e.printStackTrace();
} catch (NETWorkException e) {
e.printStackTrace();
}
}
}.start();
return Boolean.valueOf(result[0]);
}
3.5 地圖定位
地址管理模塊最核心的部分就是實(shí)現(xiàn)用戶的實(shí)時(shí)定位。在實(shí)現(xiàn)該功能的過(guò)程中,系統(tǒng)首先調(diào)用百度地圖API實(shí)現(xiàn)地圖顯示[4],再利用BDLocation類中的getLongitude()和getLatitude()方法獲取發(fā)單用戶和服務(wù)者的經(jīng)緯度信息,然后調(diào)用百度地圖顯示覆蓋物的方法,將發(fā)單用戶和服務(wù)者的位置以氣泡形式在地圖上顯示出來(lái),最后利用服務(wù)和線程實(shí)現(xiàn)訂單跟蹤。在該過(guò)程中,發(fā)單用戶點(diǎn)擊服務(wù)者位置時(shí),系統(tǒng)調(diào)用百度地圖的方向地理編碼,將獲取的經(jīng)緯度轉(zhuǎn)換為實(shí)際的地理位置。
4 結(jié)束語(yǔ)
通過(guò)運(yùn)用移動(dòng)互聯(lián)網(wǎng)技術(shù)、百度地圖API、MVC三層架構(gòu),設(shè)計(jì)了一款基于Android平臺(tái)的代買代送移動(dòng)應(yīng)用系統(tǒng)。用戶通過(guò)該系統(tǒng)發(fā)布和接受代買代送等任務(wù),實(shí)現(xiàn)一定程度的資源共享。Android端按照MVC三層架構(gòu)分為視圖模塊、控制模塊和數(shù)據(jù)模塊。視圖模塊主要負(fù)責(zé)用戶交互,控制模塊主要負(fù)責(zé)處理用戶請(qǐng)求,數(shù)據(jù)模塊利用JSON創(chuàng)建交互式數(shù)據(jù)模型。系統(tǒng)界面友好、結(jié)構(gòu)清晰,具有較高的實(shí)用性。
參考文獻(xiàn):
[1] 姚尚朗, 靳巖. Android開發(fā)入門與實(shí)戰(zhàn)[M]. 北京: 人民郵電出版社, 2013.
[2] 張志勛. 移動(dòng)終端支持下的家校合作平臺(tái)的設(shè)計(jì)與實(shí)現(xiàn)[D]. 上海: 華東師范大學(xué), 2015.
[3] 張濤, 黃強(qiáng), 毛磊雅, 等. 一個(gè)基于 JSON 的對(duì)象序列化算法[J]. 計(jì)算機(jī)工程與應(yīng)用, 2007.
[4] 遲玉梁, 甘新玲, 李永. 基于Android平臺(tái)的多人實(shí)時(shí)定位與交流系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)[J]. 實(shí)驗(yàn)技術(shù)與管理, 2015.