莊海濤 田柏玉 錢旭

摘 要:目前,二手物品交易成為當(dāng)代大學(xué)生課余生活的一大熱門。校園跳蚤市場商品多樣、價(jià)格低廉,備受同學(xué)們的青睞,有實(shí)體跳蚤市場和網(wǎng)上跳蚤市場兩種形式,仍以實(shí)體跳蚤市場為主。實(shí)體跳騷市場的功能很局限,交易效率低,無法很好地完成物品交換。而網(wǎng)上跳蚤市場,由于并不單獨(dú)針對(duì)高校學(xué)生,個(gè)人的安全便無法保障,在交易過程中容易上當(dāng)受騙。針對(duì)以上的問題,為了滿足高校學(xué)生二手交易的需求,該文重點(diǎn)研究和設(shè)計(jì)了一款大學(xué)校園二手交易Android客戶端——高校網(wǎng)上跳蚤市場,它具有良好的創(chuàng)新性與實(shí)用性,利用在校大學(xué)生的學(xué)號(hào)信息進(jìn)行實(shí)名注冊(cè),使高校學(xué)生能夠更安全、更便捷地進(jìn)行二手物品交易。
關(guān)鍵詞:二手交易 網(wǎng)上跳蚤市場 Android 實(shí)名注冊(cè)
中圖分類號(hào):TP39 文獻(xiàn)標(biāo)識(shí)碼:A 文章編號(hào):1672-3791(2015)12(a)-0026-03
在高校里,傳統(tǒng)的二手交易形式一般表現(xiàn)為一年一度的跳騷市場,通常集中于畢業(yè)之際。首先,跳騷市場時(shí)間長度很局限;其次,在跳騷市場舉辦期間,會(huì)造成學(xué)校交通的擁擠;另外,同學(xué)在搜集二手物品信息時(shí)沒有目標(biāo)性,交易效率很低。對(duì)于高校大學(xué)生這個(gè)群體,急需創(chuàng)建新型的大學(xué)校園二手物品交易平臺(tái)。
該文在Android平臺(tái)的移動(dòng)終端下,設(shè)計(jì)開發(fā)了一個(gè)借助在校大學(xué)生學(xué)號(hào)信息實(shí)現(xiàn)實(shí)名注冊(cè)的高校網(wǎng)上跳蚤市場應(yīng)用軟件,極大地提高了交易的可靠性。通過登錄個(gè)人賬號(hào),可隨時(shí)管理個(gè)人主頁信息的發(fā)布與收藏。另外,在這款軟件中具有物品分類選項(xiàng),加上個(gè)人對(duì)交易物品的文字描述和圖片展7示,更加方便同學(xué)們尋找自己需要的物品。相比傳統(tǒng)的二手交易方式有著更加強(qiáng)大的功能,在全國高校內(nèi)具有很大的實(shí)現(xiàn)和使用價(jià)值。
該文主要說明了軟件架構(gòu)設(shè)計(jì)、總體功能結(jié)構(gòu)設(shè)計(jì)以及軟件實(shí)現(xiàn)。
1 軟件總體設(shè)計(jì)
1.1 軟件架構(gòu)設(shè)計(jì)
“高校網(wǎng)上跳蚤市場”由客戶端和服務(wù)器端結(jié)合??蛻舳酥饕?fù)責(zé)與用戶進(jìn)行交互,完成注冊(cè)、登錄、發(fā)布物品信息等操作;服務(wù)器負(fù)責(zé)對(duì)用戶的請(qǐng)求進(jìn)行處理,并在客戶端和數(shù)據(jù)庫之間傳輸數(shù)據(jù);客戶端與服務(wù)器則通過服務(wù)器接口進(jìn)行相互通信[1]。
1.2 總體功能結(jié)構(gòu)設(shè)計(jì)
為了滿足用戶需求,制定如下功能模塊,各功能模塊如圖1所示.
2 軟件實(shí)現(xiàn)
2.1 服務(wù)器
服務(wù)器提供一個(gè)API接口,當(dāng)客戶端發(fā)來請(qǐng)求時(shí),服務(wù)器會(huì)把請(qǐng)求中的字符串轉(zhuǎn)化成json格式的數(shù)據(jù)字段,然后根據(jù)請(qǐng)求字段中的type來轉(zhuǎn)入相應(yīng)的程序流程處理請(qǐng)求[2]。
(1)用戶注冊(cè)。
用戶注冊(cè)會(huì)接收參數(shù)sno(學(xué)號(hào)),school(學(xué)校),password(密碼),qq(qq號(hào)),moblie(聯(lián)系電話),userName(用戶昵稱)六個(gè)參數(shù),然后根據(jù)學(xué)號(hào)和學(xué)校查詢未注冊(cè)用戶表中的用戶,將查到的用戶從未注冊(cè)的用戶表中刪除,在已注冊(cè)的用戶表中添加用戶并給相應(yīng)的屬性復(fù)值,并根據(jù)用戶的密碼明文生成sha1加密用戶密碼,最后保存該用戶。
(2)用戶登錄。
用戶登陸請(qǐng)求會(huì)接收兩個(gè)參數(shù) username 和 password ,從已注冊(cè)的用戶表中查詢?cè)撚脩?,如果查詢服?wù)器根據(jù)當(dāng)前的時(shí)間生成sessionid來標(biāo)識(shí)本次會(huì)話,sessionid保存在會(huì)話表中,然后返回給客戶端sessionid,并將用戶昵稱字段存進(jìn)cookie和session數(shù)據(jù)中,返回給客戶端。sessionid和用戶昵稱存進(jìn)會(huì)話信息表中。如果在注冊(cè)的用戶表中查不到相應(yīng)用戶則返回用戶不存在。
(3)獲取最近的物品發(fā)布信息。
用戶登陸后首先獲得最近期的10個(gè)交易,該請(qǐng)求接收兩個(gè)參數(shù)recent-start和recent-end表示獲得交易數(shù)量的起點(diǎn)和終點(diǎn),首先請(qǐng)求會(huì)從請(qǐng)求頭中解析本次會(huì)話的sessionid,如果數(shù)據(jù)庫中包含該sessionid則表示該用戶現(xiàn)在是登陸狀態(tài),可以繼續(xù)進(jìn)行請(qǐng)求。
(4)獲取用戶基本信息。
請(qǐng)求接收用戶昵稱參數(shù),從數(shù)據(jù)庫中查出該用戶后取出用戶的真實(shí)姓名,昵稱,學(xué)校,電話,qq號(hào)并封裝成字典返回。用戶不存在返回提示信息。
(5)發(fā)布一個(gè)物品。
接收上傳用戶昵稱,交易標(biāo)題,簡介,類別參數(shù)。根據(jù)交易的標(biāo)題和當(dāng)前時(shí)間生成交易的sha1來唯一標(biāo)識(shí)該交易,計(jì)算出當(dāng)前時(shí)間,在數(shù)據(jù)庫交易表中創(chuàng)建一個(gè)新的交易,并將交易的屬性根據(jù)之前的參數(shù)賦值,之后保存該交易。返回該交易的sha1和上傳用戶昵稱。
圖片上傳在創(chuàng)建交易請(qǐng)求之后執(zhí)行,接收一個(gè)交易sha1參數(shù)和圖片的二進(jìn)制數(shù)據(jù)參數(shù)。首先從圖片的二進(jìn)制數(shù)據(jù)中獲取圖片名稱,根據(jù)名稱和當(dāng)前時(shí)間生成圖片sha1來唯一表示。再由圖片的數(shù)據(jù)生成圖片文件和縮略圖文件并保存。最后在圖片表里創(chuàng)建一個(gè)圖片的數(shù)據(jù),將所屬的交易sha1和圖片sha1存入數(shù)據(jù)庫。
(6)獲取單個(gè)發(fā)布物品的詳情。
請(qǐng)求接收交易的sha1和上傳用戶昵稱作為參數(shù)。首先根據(jù)交易sha1從數(shù)據(jù)庫中得到該交易,取出交易的類別,簡介,標(biāo)題,時(shí)間屬性封裝成字典,返回屬性值。在根據(jù)用戶昵稱和交易sha1在用戶收藏表中取值,如果取到則表明用戶已經(jīng)收藏,反之沒有收藏,返回是否收藏的標(biāo)志。根據(jù)交易sha1在交易圖片表中取出交易圖片的sha1,返回圖片sha1[3]。
(7)收藏和取消收藏。
收藏:接收用戶昵稱和交易sha1參數(shù),然后根據(jù)昵稱和sha1在用戶收藏表中判斷該收藏是否存在,如果存在返回你已經(jīng)收藏過,不存在就在用戶收藏表中添加一個(gè)收藏。
取消收藏:接收戶昵稱和交易sha1參數(shù), 然后根據(jù)昵稱和sha1在用戶收藏表中判斷該收藏是否存在,如果存在就刪除交易,不存在就會(huì)返回錯(cuò)誤信息提示收藏不存在。
(8)獲取我發(fā)布的物品。
接收開始和結(jié)束的數(shù)量參數(shù),從session數(shù)據(jù)中獲取當(dāng)前用戶昵稱,在根據(jù)開始和結(jié)束數(shù)量從交易表中取出制定數(shù)量的當(dāng)前用戶發(fā)布的交易,再分別對(duì)每一個(gè)交易取出各項(xiàng)屬性,根據(jù)用戶收藏表判斷用戶是否收藏過,根據(jù)圖片表取出交易的圖片,把各項(xiàng)屬性值封裝成字典,形成一個(gè)屬性集合的列表,對(duì)列表按照時(shí)間排序后返回。
(9)獲取我收藏的物品。
接收開始和結(jié)束的數(shù)量參數(shù),從session數(shù)據(jù)中獲取當(dāng)前用戶昵稱,根據(jù)用戶昵稱在收藏表中取出所有當(dāng)前用戶收藏的交易sha1,再分別對(duì)每一個(gè)sha1取出對(duì)應(yīng)的交易,取出交易的各項(xiàng)屬性值,在圖片表里取出對(duì)應(yīng)圖片形成交易的信息的字典。把每個(gè)交易信息按照時(shí)間排序后返回。
(10)按照分類獲取發(fā)布的物品。
接收類別參數(shù),開始和結(jié)束的數(shù)量參數(shù)從session數(shù)據(jù)中獲取當(dāng)前用戶昵稱,根據(jù)類別在交易表中找到所有當(dāng)前類別的交易,在根據(jù)數(shù)量參數(shù)得到對(duì)應(yīng)的交易,再分別對(duì)每一個(gè)交易取出所有屬性,在圖片表里取出對(duì)應(yīng)圖片,在收藏表里取出當(dāng)前用戶是否收藏過,形成一個(gè)交易的屬性的字典。返回所有交易字典的列表。
2.2 客戶端
手機(jī)客戶端采用android平臺(tái)。
程序中需要頻繁地發(fā)送http請(qǐng)求和接收http回復(fù),如果將請(qǐng)求和回復(fù)分別在每一個(gè)activity中都進(jìn)行定義的話,勢必會(huì)導(dǎo)致程序代碼量增大,結(jié)構(gòu)混亂。同時(shí),如果一個(gè)請(qǐng)求需要在不同的activity中執(zhí)行,就會(huì)出現(xiàn)重復(fù)定義的問題。因此,在整個(gè)應(yīng)用中,最重要的就是對(duì)整體框架的搭建[4]。
(1)定義兩個(gè)接口CollegeBarterRequest和CollegeBarterResponse。
在CollegeBarterRequest中定義方法toJsonString()和getType()。toJsonString()用來將字符串轉(zhuǎn)換成http請(qǐng)求中需要用到的JSON數(shù)據(jù),getType()返回當(dāng)前請(qǐng)求的類型。
在CollegeBarterResponse中定義方法fromJsonString()、getType()和getStatus()。fromJsonString()用來將服務(wù)器返回的JSON數(shù)據(jù)進(jìn)行解析,獲取需要獲得的字段值,getType()返回當(dāng)前回復(fù)的類型,getStatus()返回是否正確的對(duì)數(shù)據(jù)進(jìn)行解析。
在程序中每一個(gè)http請(qǐng)求和回復(fù)都要分別實(shí)現(xiàn)上述兩個(gè)接口。
(2)自定義一個(gè)CollegeBarterClient用來處理http的請(qǐng)求和回復(fù)。
在構(gòu)造函數(shù)中,初始化應(yīng)用程序需要訪問的服務(wù)器地址。
定義一個(gè)函數(shù)CollegeBarterResponse executeRemoteComm
and(CollegeBarterRequest request, AppData appData)。在這個(gè)函數(shù)中,需要初始化一個(gè)HttpPost,然后將需要上傳的數(shù)據(jù)添加到NameValuePair類型的參數(shù)里面,包括驗(yàn)證用戶是否登錄的sessionId。在接收到http回復(fù)之后,通過request的不同類型對(duì)http回復(fù)執(zhí)行不同的操作。
(3)定義類CollegeBarterOperation實(shí)現(xiàn)一個(gè)Runnable接口。
在CollegeBarterOperation中,通過線程發(fā)送http請(qǐng)求,接收http請(qǐng)求后,通過handle.post進(jìn)行通知??梢员苊庥捎诜?wù)器沒有響應(yīng)導(dǎo)致UI線程超時(shí),應(yīng)用程序出現(xiàn)ANR(Application No Response)的問題。
(4)定義接口CollegeBarterOperationListener。
在接口中定義方法onCollegeBarterOperationFinish()。在每一個(gè)需要進(jìn)行服務(wù)器通訊的activity中實(shí)現(xiàn)這個(gè)接口,可以在當(dāng)前activity中的onCollegeBarterOperationFinish()中接收到對(duì)應(yīng)請(qǐng)求的回復(fù),從而對(duì)回復(fù)進(jìn)行處理。
3 結(jié)語
“高校網(wǎng)上跳蚤市場”是針對(duì)當(dāng)前跳蚤市場的現(xiàn)狀和校園對(duì)跳蚤市場的需求開發(fā)的,目標(biāo)人群是在校大學(xué)生。通過實(shí)名制的注冊(cè)與登錄,可以查看到發(fā)布者的個(gè)人真實(shí)有效的信息。因此,無論是對(duì)賣家還是對(duì)買家而言,都提供了一個(gè)良好的交易平臺(tái)。此外,軟件的功能設(shè)計(jì)完善,可做到更高效、更便捷地處理高校大學(xué)生的閑置物品,減少浪費(fèi),提高物品利用率。
參考文獻(xiàn)
[1] 楊豐盛.Android應(yīng)用開發(fā)揭秘[M].北京:機(jī)械工業(yè)出版社,2010:88-91.
[2] 范懷宇.Android開發(fā)精要[M].北京:機(jī)械工業(yè)出版社,2012:154-156.
[3] 孟巖.Android組件模型評(píng)析(上)[J].程序員,2008(1):49-51.
[4] 張棟棟,徐峰.一個(gè)移動(dòng)應(yīng)用個(gè)性化集成框架的研究及其在Android平臺(tái)的實(shí)現(xiàn)[J].計(jì)算機(jī)科學(xué),2014(11):63-68.