基于Android系統(tǒng)的校園助手應(yīng)用程序開(kāi)發(fā)畢業(yè)設(shè)計(jì)論文_第1頁(yè)
基于Android系統(tǒng)的校園助手應(yīng)用程序開(kāi)發(fā)畢業(yè)設(shè)計(jì)論文_第2頁(yè)
基于Android系統(tǒng)的校園助手應(yīng)用程序開(kāi)發(fā)畢業(yè)設(shè)計(jì)論文_第3頁(yè)
基于Android系統(tǒng)的校園助手應(yīng)用程序開(kāi)發(fā)畢業(yè)設(shè)計(jì)論文_第4頁(yè)
基于Android系統(tǒng)的校園助手應(yīng)用程序開(kāi)發(fā)畢業(yè)設(shè)計(jì)論文_第5頁(yè)
已閱讀5頁(yè),還剩32頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

xxx大學(xué)畢業(yè)設(shè)計(jì)(論文)DOCPROPERTYPO_TopicName基于Android系統(tǒng)的校園助手應(yīng)用程序開(kāi)發(fā)學(xué)院(系):計(jì)算機(jī)科學(xué)與技術(shù)學(xué)院專業(yè)班級(jí):學(xué)生姓名:指導(dǎo)教師:xxx學(xué)位論文原創(chuàng)性聲明本人鄭重聲明:所呈交的論文是本人在導(dǎo)師的指導(dǎo)下獨(dú)立進(jìn)行研究所取得的研究成果。除了文中特別加以標(biāo)注引用的內(nèi)容外,本論文不包括任何其他個(gè)人或集體已經(jīng)發(fā)表或撰寫(xiě)的成果作品。本人完全意識(shí)到本聲明的法律后果由本人承擔(dān)。作者簽名:年月日學(xué)位論文版權(quán)使用授權(quán)書(shū)本學(xué)位論文作者完全了解學(xué)校有關(guān)保障、使用學(xué)位論文的規(guī)定,同意學(xué)校保留并向有關(guān)學(xué)位論文管理部門(mén)或機(jī)構(gòu)送交論文的復(fù)印件和電子版,允許論文被查閱和借閱。本人授權(quán)省級(jí)優(yōu)秀學(xué)士論文評(píng)選機(jī)構(gòu)將本學(xué)位論文的全部或部分內(nèi)容編入有關(guān)數(shù)據(jù)進(jìn)行檢索,可以采用影印、縮印或掃描等復(fù)制手段保存和匯編本學(xué)位論文。本學(xué)位論文屬于1、保密囗,在年解密后適用本授權(quán)書(shū)2、不保密囗。(請(qǐng)?jiān)谝陨舷鄳?yīng)方框內(nèi)打“√”)作者簽名:年月日導(dǎo)師簽名:年月日第1章緒論本文主要研究的是Android平臺(tái)下校園助手應(yīng)用程序的開(kāi)發(fā),首先,將從研究現(xiàn)狀,研究?jī)?nèi)容,預(yù)期目標(biāo)等方面做一個(gè)詳細(xì)的介紹。1.1項(xiàng)目開(kāi)發(fā)背景和意義1.1.1項(xiàng)目開(kāi)發(fā)背景如今手機(jī)就像鑰匙一樣,是人們出門(mén)必帶的物品之一。隨著科技的迅猛發(fā)展,現(xiàn)在的手機(jī)都是智能手機(jī),它的功能不僅僅只是用來(lái)打電話或是收發(fā)短信,用戶還可以用它聽(tīng)歌看視頻、用藍(lán)牙傳輸數(shù)據(jù)、玩游戲、上網(wǎng)等等,比起用計(jì)算機(jī)訪問(wèn)因特網(wǎng)更方便快捷。而智能手機(jī)中占據(jù)領(lǐng)先地位的當(dāng)數(shù)android操作系統(tǒng)的智能機(jī)。Android是一套真正意義的開(kāi)放性移動(dòng)設(shè)備綜合平臺(tái),它包括操作系統(tǒng)、中間件和一些關(guān)鍵的平臺(tái)應(yīng)用。Android的Java程序運(yùn)行環(huán)境包含一組Java核心函數(shù)庫(kù)及Dalvik虛擬機(jī),他們有效地優(yōu)化了Java程序的運(yùn)行過(guò)程。Android系統(tǒng)平臺(tái)基于優(yōu)化了的Linux內(nèi)核,它提供諸如內(nèi)存管理、進(jìn)程管理、設(shè)備驅(qū)動(dòng)等服務(wù),同時(shí)也是手機(jī)硬件的連接層。Android最大的優(yōu)點(diǎn)在于它是一個(gè)開(kāi)放的體系結(jié)構(gòu),具有非常好的開(kāi)發(fā)和調(diào)試環(huán)境,而且還制成各種可擴(kuò)展的用戶體驗(yàn),Android里面有非常豐富的圖形系統(tǒng),對(duì)多媒體的支持功能和非常強(qiáng)大的瀏覽器。Android平臺(tái)的開(kāi)放性特點(diǎn)既能促進(jìn)技術(shù)的創(chuàng)新,又有助于降低開(kāi)發(fā)成本,還可以使運(yùn)營(yíng)商能非常方便地地址特色化產(chǎn)品,因此,它具有很大的市場(chǎng)發(fā)展?jié)摿Α?.1.2項(xiàng)目開(kāi)發(fā)意義隨著3G網(wǎng)絡(luò)的使用,移動(dòng)終端不再是通訊網(wǎng)絡(luò)的終端,還將成為互聯(lián)網(wǎng)的終端。因此,智能移動(dòng)終端的應(yīng)用和需要的服務(wù)將會(huì)有很大的發(fā)展空間。Android在短短的時(shí)間內(nèi)以驚人的速度占據(jù)的大量的智能手機(jī)終端市場(chǎng)中脫穎而出,而且將繼續(xù)擴(kuò)大其用戶量。而人流量、信息量都非常大的高校對(duì)智能終端的需求非常大,廣大學(xué)生用戶希望在第一時(shí)間最便捷的查詢到需要的信息,因此,開(kāi)發(fā)一款基于android手機(jī)的校園助手軟件意義重大。1.2Android系統(tǒng)國(guó)內(nèi)外發(fā)展現(xiàn)狀A(yù)ndroid系統(tǒng),擁有低廉的引入成本,良好的用戶體驗(yàn)開(kāi)放性較強(qiáng)的特點(diǎn),加上AndroidMarket和眾多第三方應(yīng)用商店做后盾,在應(yīng)用方面的資源也非常豐富;雖然Android目前存在安全性和版本混亂等問(wèn)題,但由于其適應(yīng)了移動(dòng)互聯(lián)網(wǎng)的發(fā)展趨勢(shì),切合了移動(dòng)互聯(lián)網(wǎng)產(chǎn)業(yè)鏈各方的發(fā)展變化需求,所以取得了迅猛的發(fā)展。另外Android相比較與其他手機(jī)操作系統(tǒng)而言,具有以下特點(diǎn):1、開(kāi)放性手機(jī)平臺(tái)Android是Google開(kāi)發(fā)的基于Linux平臺(tái)的開(kāi)源手機(jī)操作系統(tǒng)。Google通過(guò)與運(yùn)營(yíng)商、設(shè)備制造商、手機(jī)公司和其他有關(guān)各方結(jié)成深層次的合作伙伴關(guān)系,希望借助建立標(biāo)準(zhǔn)化、開(kāi)放式的智能手機(jī)操作系統(tǒng),在移動(dòng)產(chǎn)業(yè)內(nèi)形成一個(gè)開(kāi)放式的生態(tài)系統(tǒng)。開(kāi)發(fā)性對(duì)于Android的發(fā)展而言,有利于積累人氣,這里的人氣包括消費(fèi)者和廠商,而對(duì)于消費(fèi)者者來(lái)講,最大的收益正式豐富的軟件資源,開(kāi)放的平臺(tái)也會(huì)帶來(lái)更大競(jìng)爭(zhēng),如此一來(lái),消費(fèi)者將可以用耕地的價(jià)位購(gòu)得心儀的手機(jī)。2、網(wǎng)絡(luò)集成性很高Android內(nèi)部集成了大量的google應(yīng)用,如Gmail、Reader、Map、Docs、Youtube等等,涵蓋了生活中各個(gè)方面的網(wǎng)絡(luò)應(yīng)用,對(duì)長(zhǎng)期使用網(wǎng)絡(luò)、信息依賴度比較高的人群很合適。3、Android具備創(chuàng)新性自從Google開(kāi)發(fā)出Android后,許多人認(rèn)為其技術(shù)可信度要比其它操作系統(tǒng)略勝一籌,但這并不是用戶購(gòu)買(mǎi)Android智能手機(jī)的唯一原因。Android平臺(tái)提供給第三方開(kāi)發(fā)商一個(gè)十分寬泛、自由的環(huán)境,不會(huì)受到各種條條框框的阻撓??上攵?,會(huì)有多少新穎別致的軟件會(huì)誕生人們認(rèn)為Android是一種相對(duì)較新的、又較為成熟的技術(shù),在達(dá)到巔峰之前還有很大發(fā)展空間。4、可以有豐富的硬件選擇這一點(diǎn)還是與Android平臺(tái)的開(kāi)放性相關(guān),由于Android的開(kāi)放性,眾多的廠商會(huì)推出千奇百怪,功能特色各具的多種產(chǎn)品。功能上的差異和特色,卻不會(huì)影響到數(shù)據(jù)同步、甚至軟件的兼容,好比你從諾基亞Symbian風(fēng)格手機(jī)一下改用蘋(píng)果iPhone,同時(shí)還可將Symbian中優(yōu)秀的軟件帶到iPhone上使用、聯(lián)系人等資料更是可以方便地轉(zhuǎn)移。1.3研究?jī)?nèi)容及預(yù)期目標(biāo)本文的研究?jī)?nèi)容主要是:在移動(dòng)通信環(huán)境下,基于Android系統(tǒng)開(kāi)發(fā)校園常用應(yīng)用程序,方便學(xué)生的學(xué)習(xí)和生活。校園助手主要設(shè)定課表模塊,記事本、計(jì)算器等常用學(xué)習(xí)工具模塊以及小應(yīng)用等娛樂(lè)模塊。通過(guò)使用本軟件可以幫助學(xué)生合理安排好自己的學(xué)習(xí)時(shí)間、文體活動(dòng)時(shí)間和參加社會(huì)活動(dòng)的時(shí)間,能夠豐富學(xué)生的校園文化生活,使得學(xué)生們的時(shí)間分配更加合理化,同時(shí)提高時(shí)間分配的合理性,能夠?qū)崿F(xiàn)德智體美全方面的發(fā)展。本軟件預(yù)期要實(shí)現(xiàn)的目標(biāo)是:第一,開(kāi)發(fā)課表模塊,通過(guò)該模塊能夠?qū)牒笈_(tái)班級(jí)課表同時(shí)也能自定義編輯用戶的個(gè)人時(shí)間規(guī)劃安排。第二,通過(guò)添加記事本模塊,可以將用戶任意時(shí)刻想記錄的事情都記錄到系統(tǒng)中,功能類似于備忘錄。最后,結(jié)合學(xué)生的普遍情況,加入計(jì)算器模塊和娛樂(lè)小應(yīng)用滿足學(xué)生的一些其他方面的日常需求,同時(shí)也使程序的功能更加完善。概要設(shè)計(jì)2.1需求分析2.1.1必要性分析目前校園的信息量非常龐大,校園的管理方式走向科技化已經(jīng)成為一種趨勢(shì)。手機(jī)與校園信息進(jìn)行對(duì)接,提供一些實(shí)用的服務(wù)不僅可以給學(xué)生和老師帶來(lái)便利,同時(shí)也為學(xué)校的管理提供有效的支持,為校園信息化提供幫助。而且很多在校學(xué)生每天日常生活都缺乏合理的時(shí)間規(guī)劃,從而導(dǎo)致了時(shí)間利用效率十分低下,往往許多計(jì)劃也會(huì)因?yàn)橥浂鴮?dǎo)致計(jì)劃被打亂,生活呈現(xiàn)出一種紊亂的狀態(tài)。為此,開(kāi)發(fā)本款校園生活小助手類的軟件顯得十分有必要。通過(guò)使用本軟件,可以將生活中的瑣事都添加到記錄當(dāng)中,實(shí)時(shí)提醒用戶合理規(guī)劃時(shí)間安排。另外,本軟件可以記錄生活中點(diǎn)點(diǎn)滴滴小事,抓住每一瞬間的觸動(dòng)和靈感等,實(shí)用性非常高。2.1.2功能需求整個(gè)開(kāi)發(fā)過(guò)程分為前臺(tái)和后臺(tái)兩部分,其主要功能需求為:軟件的前臺(tái)是手機(jī)客戶端,在此客戶端上開(kāi)發(fā)課表,使用戶可以實(shí)現(xiàn)對(duì)課表的查看、編輯和刪除,另外,在此客戶端上開(kāi)發(fā)記事本,類似于備忘錄,使用戶可以記錄自己個(gè)人計(jì)劃、事務(wù)安排或者是作業(yè)等等。另外就是就是開(kāi)發(fā)一個(gè)計(jì)算器,能滿足用戶日常的計(jì)算功能,還有開(kāi)發(fā)一些小應(yīng)用,使用戶在緊張的學(xué)習(xí)之余還可以放松自己。應(yīng)用軟件當(dāng)然也離不開(kāi)管理數(shù)據(jù)的后臺(tái),后臺(tái)主要擁有更高的管理權(quán)限。能夠?qū)崿F(xiàn)比用戶權(quán)限更高級(jí)別的操作,以便于幫助用戶更好地使用本款軟件,如后臺(tái)應(yīng)該可以實(shí)現(xiàn)對(duì)課表的管理以及增刪改查,可以實(shí)現(xiàn)對(duì)軟件用戶的人員管理等,這些都是在開(kāi)發(fā)一款應(yīng)用程序的過(guò)程中必須要實(shí)現(xiàn)的。2.2系統(tǒng)總體分析此設(shè)計(jì)是針對(duì)Android開(kāi)發(fā)平臺(tái)的校園助手應(yīng)用程序的設(shè)計(jì),該應(yīng)用程序設(shè)計(jì)主要分為三大模塊,即課程表模塊、記事本、計(jì)算器模塊以及一些額外的小應(yīng)用模塊,涉及的功能切合了當(dāng)代大學(xué)生的實(shí)際需要,能滿足學(xué)生學(xué)習(xí)生活中的基本需求。該應(yīng)用程序完全采用Android原生的java語(yǔ)言進(jìn)行開(kāi)發(fā),能夠?qū)崿F(xiàn)前后臺(tái)良好的銜接和交互,系統(tǒng)運(yùn)行流暢,響應(yīng)速度很快,從而具有很好的用戶體驗(yàn)。應(yīng)用程序主要開(kāi)發(fā)的部分是課表模塊以及記事本模塊,前臺(tái)界面主要是采用最為簡(jiǎn)單的LinearLayout嵌套組成,其中課表模塊是使用的遠(yuǎn)程數(shù)據(jù)庫(kù),并將課表模塊的數(shù)據(jù)部分放在了移動(dòng)云平臺(tái)Bmob上,以便完成開(kāi)發(fā)后能通過(guò)手機(jī)直接訪問(wèn)到遠(yuǎn)程數(shù)據(jù),而不需要依賴Tomcat進(jìn)行發(fā)布。記事本模塊由于涉及到用戶隱私,將其做成了本地?cái)?shù)據(jù)庫(kù),在非聯(lián)網(wǎng)的情況下也可以對(duì)記事本進(jìn)行流暢的訪問(wèn)。

針對(duì)校園助手應(yīng)用程序的系統(tǒng)模塊設(shè)計(jì)主要分為三大模塊,課程表模塊,記事本模塊,小應(yīng)用模塊。

系統(tǒng)詳細(xì)模塊圖如下:各個(gè)功能模塊的詳細(xì)說(shuō)明如下:記事本模塊:要包括文本編輯、圖片編輯和記錄查看修改功能。用戶可以直接通過(guò)點(diǎn)擊對(duì)應(yīng)界面的右上角的照相機(jī)按鈕進(jìn)入拍照界面,拍照完后跳轉(zhuǎn)到文本編輯界面可以對(duì)照片相關(guān)內(nèi)容進(jìn)行描述說(shuō)明。另外,用戶在進(jìn)入記事本界面后,可以看到之前所有的歷史記錄。并能夠?qū)λ杏涗涍M(jìn)行修改刪除等操作。課程表模塊:該模塊主要包括班級(jí)課本和個(gè)人計(jì)劃安排,同時(shí)還能夠?qū)φn本和個(gè)人信息進(jìn)行批量刪除和導(dǎo)入,在導(dǎo)入后的數(shù)據(jù)顯示在課表中后可以對(duì)對(duì)應(yīng)課程進(jìn)行編輯。 小應(yīng)用模塊:該模塊分為計(jì)算器和娛樂(lè)小應(yīng)用模塊,如數(shù)獨(dú)游戲。 個(gè)人中心模塊:主要包括個(gè)人資料的查看編輯、使用幫助、軟件說(shuō)明以及退出登錄等。用戶可以通過(guò)點(diǎn)擊界面最上方我的資料處進(jìn)入個(gè)人資料的編輯查看界面,點(diǎn)擊使用幫助會(huì)彈出相關(guān)軟件使用過(guò)程的幫助文檔。第3章相關(guān)技術(shù)介紹3.1Android應(yīng)用開(kāi)發(fā)介紹Android開(kāi)發(fā)中有四大組件,分別是Activity,Service,ContentProvider,BroadcastReceiver。1.Activity應(yīng)用程序中,一個(gè)Activity通常就是一個(gè)單獨(dú)的屏幕,它上面可以顯示一些控件也可以監(jiān)聽(tīng)并處理用戶的事件做出響應(yīng)。Activity之間通過(guò)Intent進(jìn)行通信。在Intent的描述結(jié)構(gòu)中,有兩個(gè)最重要的部分:動(dòng)作和動(dòng)作對(duì)應(yīng)的數(shù)據(jù)。2.BroadcastReceiver 應(yīng)用程序可以通過(guò)BroadReceiver對(duì)外部事件進(jìn)行過(guò)濾,只對(duì)感興趣的外部事件(如當(dāng)電話呼入時(shí),或者數(shù)據(jù)網(wǎng)絡(luò)可用時(shí))進(jìn)行接收并做出響應(yīng)。廣播接收器沒(méi)有用戶界面。然而,它們可以啟動(dòng)一個(gè)activity或serice來(lái)響應(yīng)它們收到的信息,或者用NotificationManager來(lái)通知用戶。通知可以用很多種方式來(lái)吸引用戶的注意力──閃動(dòng)背燈、震動(dòng)、播放聲音等。一般來(lái)說(shuō)是在狀態(tài)欄上放一個(gè)持久的圖標(biāo),用戶可以打開(kāi)它并獲取消息。3.Service一個(gè)Service是一段長(zhǎng)生命周期的,沒(méi)有用戶界面的程序,可以用來(lái)開(kāi)發(fā)如監(jiān)控類程序。比較好的一個(gè)例子就是一個(gè)正在從播放列表中播放歌曲的媒體播放器。在一個(gè)媒體播放器的應(yīng)用中,應(yīng)該會(huì)有多個(gè)activity,讓使用者可以選擇歌曲并播放歌曲。然而,音樂(lè)重放這個(gè)功能并沒(méi)有對(duì)應(yīng)的activity,因?yàn)槭褂谜弋?dāng)然會(huì)認(rèn)為在導(dǎo)航到其它屏幕時(shí)音樂(lè)應(yīng)該還在播放的。在這個(gè)例子中,媒體播放器這個(gè)activity會(huì)使用Context.startService()來(lái)啟動(dòng)一個(gè)service,從而可以在后臺(tái)保持音樂(lè)的播放。同時(shí),系統(tǒng)也將保持這個(gè)service一直執(zhí)行,直到這個(gè)service運(yùn)行結(jié)束。另外,我們還可以通過(guò)使用Context.bindService()方法,連接到一個(gè)service上(如果這個(gè)service還沒(méi)有運(yùn)行將啟動(dòng)它)。當(dāng)連接到一個(gè)service之后,還可以用service提供的接口與它進(jìn)行通訊。4.ContentProvider android平臺(tái)提供了ContentProvider使一個(gè)應(yīng)用程序的指定數(shù)據(jù)集提供給其他應(yīng)用程序。這些數(shù)據(jù)可以存儲(chǔ)在文件系統(tǒng)中、在一個(gè)SQLite數(shù)據(jù)庫(kù)、或以任何其他合理的方式,其他應(yīng)用可以通過(guò)ContentResolver類從該內(nèi)容提供者中獲取或存入數(shù)據(jù)。只有需要在多個(gè)應(yīng)用程序間共享數(shù)據(jù)時(shí)才需要內(nèi)容提供者。例如,通訊錄數(shù)據(jù)被多個(gè)應(yīng)用程序使用,且必須存儲(chǔ)在一個(gè)內(nèi)容提供者中,它的優(yōu)點(diǎn)是統(tǒng)一數(shù)據(jù)訪問(wèn)方式。3.2Android生命周期介紹 圖3.1圖3.1所示為安卓系統(tǒng)開(kāi)發(fā)中的生命周期圖。系統(tǒng)中Activity被一個(gè)Activity棧所管理。當(dāng)一個(gè)新的Activity啟動(dòng)時(shí),將被放置到棧頂,成為運(yùn)行中的Activity,前一個(gè)Activity保留在棧中,不再放到前臺(tái),直到新的Activity退出為止。Activity有四種本質(zhì)區(qū)別的狀態(tài):在屏幕的前臺(tái)(Activity棧頂),叫做活動(dòng)狀態(tài)或者運(yùn)行狀態(tài)(activeorrunning)如果一個(gè)Activity失去焦點(diǎn),但是依然可見(jiàn)(一個(gè)新的非全屏的Activity或者一個(gè)透明的Activity被放置在棧頂),叫做暫停狀態(tài)(Paused)。一個(gè)暫停狀態(tài)的Activity依然保持活力(保持所有的狀態(tài),成員信息,和窗口管理器保持連接),但是在系統(tǒng)內(nèi)存極端低下的時(shí)候?qū)⒈粴⒌簟H绻粋€(gè)Activity被另外的Activity完全覆蓋掉,叫做停止?fàn)顟B(tài)(Stopped)。它依然保持所有狀態(tài)和成員信息,但是它不再可見(jiàn),所以它的窗口被隱藏,當(dāng)系統(tǒng)內(nèi)存需要被用在其他地方的時(shí)候,Stopped的Activity將被殺掉。如果一個(gè)Activity是Paused或者Stopped狀態(tài),系統(tǒng)可以將該Activity從內(nèi)存中刪除,Android系統(tǒng)采用兩種方式進(jìn)行刪除,要么要求該Activity結(jié)束,要么直接殺掉它的進(jìn)程。當(dāng)該Activity再次顯示給用戶時(shí),它必須重新開(kāi)始和重置前面的狀態(tài)。3.3移動(dòng)后端服務(wù)Bmob開(kāi)發(fā)一個(gè)具有網(wǎng)絡(luò)功能的移動(dòng)應(yīng)用,除了要開(kāi)發(fā)客戶端,還要開(kāi)發(fā)服務(wù)端,還需要服務(wù)器。為了簡(jiǎn)化移動(dòng)應(yīng)用的開(kāi)發(fā)和部署,讓開(kāi)發(fā)者只專注于客戶端的開(kāi)發(fā),而將后端服務(wù)整合成API提供給開(kāi)發(fā)者調(diào)用,這就是BaaS(BackendasaService)。目前,國(guó)外至少已經(jīng)有二十多家企業(yè)進(jìn)入了這個(gè)領(lǐng)域,其中,提供的后端服務(wù)比較全面的有StackMob、Parse、Kinvey。而國(guó)內(nèi),到目前為止只有三個(gè)平臺(tái),AMTBaaS、Xone以及Bmob。本次開(kāi)發(fā)使用的就是Bmob移動(dòng)云服務(wù)。在Bmob平臺(tái)上,只需注冊(cè)一個(gè)帳號(hào),成功后申請(qǐng)創(chuàng)建任意多個(gè)數(shù)據(jù)庫(kù),獲得對(duì)應(yīng)的Key,下載對(duì)應(yīng)版本的SDK并將其嵌入到移動(dòng)應(yīng)用中,便可以調(diào)用存取API,進(jìn)行數(shù)據(jù)的任意操作,非常方便。Bmob提供了一體的可視化后臺(tái),數(shù)據(jù)操作簡(jiǎn)單方便,增刪改查云端同步。離線數(shù)據(jù)操作,靈活應(yīng)對(duì)用戶網(wǎng)絡(luò)不穩(wěn)定的情況,此外還支持多表關(guān)聯(lián)處理,數(shù)據(jù)的批量處理,還有本地化數(shù)據(jù)緩存操作讓數(shù)據(jù)存取更快速。同時(shí),Bmob還提供了豐富自由的數(shù)據(jù)類型。包括String(字符串)、Number(數(shù)值,包括整數(shù)和浮點(diǎn)數(shù))、Boolean(布爾值)、Date(日期)、File(文件)、Geopoint(地理位置)、Array(數(shù)組)、Object(對(duì)象)等。這些數(shù)據(jù)類型是在我稍后的數(shù)據(jù)庫(kù)設(shè)計(jì)中將主要使用到的,也許這跟我們平常使用的數(shù)據(jù)類型有一些區(qū)別,但是使用起來(lái)非常方便,完全能滿足我們對(duì)數(shù)據(jù)類型的需求。針對(duì)移動(dòng)應(yīng)用開(kāi)發(fā)的特性,Bmob還提供了主動(dòng)推送服務(wù),可以讓移動(dòng)開(kāi)發(fā)者將信息從服務(wù)器直接推送到應(yīng)用程序中,從而實(shí)現(xiàn)軟件的主動(dòng)更新、信息通知等服務(wù);提供了簡(jiǎn)潔的文件存儲(chǔ)功能,僅通過(guò)調(diào)用文件存儲(chǔ)API就能夠?qū)⒁曨l、音頻、照片、APK等文件存放到服務(wù)器端,以供隨時(shí)下載使用;提供了專門(mén)針對(duì)用戶的API功能,方便您對(duì)用戶的管理工作,如注冊(cè)、登錄、注銷、找回密碼等;提供了地理信息功能,實(shí)現(xiàn)地理信息的搜索功能,如您可以檢索某個(gè)地理位置附近的信息;提供了詳盡的移動(dòng)數(shù)據(jù)分析功能,讓開(kāi)發(fā)者能夠查看并分析移動(dòng)應(yīng)用的用戶變化、應(yīng)用終端變化、用戶粘合度等信息,從而有助于開(kāi)發(fā)者更好的提升用戶體驗(yàn)。另外,Bmob云存儲(chǔ)服務(wù)平臺(tái)除在服務(wù)器部署上的安全處理之外,還采用了多租戶的虛擬隔離模式,即任何一個(gè)開(kāi)發(fā)者的流量變化或者數(shù)據(jù)變化,均不會(huì)對(duì)其他開(kāi)發(fā)者的應(yīng)用帶來(lái)影響。這些優(yōu)秀的性能使Bmob成為了移動(dòng)應(yīng)用開(kāi)發(fā)中的不可缺少的一部分,使用Bmob進(jìn)行移動(dòng)后臺(tái)開(kāi)發(fā)可以避免很多不必要的麻煩,讓開(kāi)發(fā)者更好地專注于程序優(yōu)化和用戶體驗(yàn)。3.4SQLite數(shù)據(jù)庫(kù)SQLite,是一款輕型的數(shù)據(jù)庫(kù),是關(guān)系型數(shù)據(jù)庫(kù)管理系統(tǒng),它包含在一個(gè)相對(duì)小的C庫(kù)中。它的設(shè)計(jì)目標(biāo)是嵌入式的,而且目前已經(jīng)在很多嵌入式產(chǎn)品中使用了它,最長(zhǎng)用的就是現(xiàn)在的手機(jī)系統(tǒng)中,它占用資源非常的低,在嵌入式設(shè)備中,可能只需要幾百K的內(nèi)存就夠了。它能夠支持Windows/Linux/Unix等等主流的操作系統(tǒng),同時(shí)能夠跟很多程序語(yǔ)言相結(jié)合,還有ODBC接口,同樣比起Mysql、PostgreSQL這兩款開(kāi)源的世界著名數(shù)據(jù)庫(kù)管理系統(tǒng)來(lái)講,它的處理速度比他們都快。因?yàn)楝F(xiàn)在的手機(jī)內(nèi)存還較小,而SQLite因?yàn)檎加玫馁Y源很少,而且性能完全足夠手機(jī)移動(dòng)設(shè)備的使用,所以大部分手機(jī)軟件開(kāi)發(fā)都會(huì)選擇使用SQLite數(shù)據(jù)庫(kù)進(jìn)行移動(dòng)開(kāi)發(fā)。對(duì)于程序開(kāi)發(fā)人員而言,使用SQLite數(shù)據(jù)庫(kù)也十分便捷。開(kāi)發(fā)人員只需要下載SQLite數(shù)據(jù)庫(kù)的JDBC,然后將下載到的包解壓得到j(luò)ar包sqlitejdbc-v033-nested.jar放至%JAVA_HOME%\lib下,并且將其路徑添加到classpath系統(tǒng)環(huán)境變量中,然后就可以直接在代碼中引用SQLite的驅(qū)動(dòng),調(diào)用相關(guān)方法進(jìn)行數(shù)據(jù)庫(kù)的操作。第4章校園助手?jǐn)?shù)據(jù)庫(kù)設(shè)計(jì)4.1系統(tǒng)E-R圖下圖4.1所示為程序中主要開(kāi)發(fā)模塊的系統(tǒng)E-R圖,從中也可以看出整個(gè)系統(tǒng)的功能設(shè)計(jì)以及實(shí)體之間的聯(lián)系,從而能進(jìn)行程序的有序開(kāi)發(fā)。 圖4.14.2詳細(xì)數(shù)據(jù)庫(kù)設(shè)計(jì)下面為詳細(xì)的數(shù)據(jù)庫(kù)設(shè)計(jì),因?yàn)楹笈_(tái)數(shù)據(jù)庫(kù)是建在前面介紹的Bmob云平臺(tái)上面的,因此采用了Bmob上面的數(shù)據(jù)類型。在此做一個(gè)簡(jiǎn)單的說(shuō)明。Bmob上面的String類型對(duì)應(yīng)于平常使用的String類型,Number對(duì)應(yīng)于平常使用的Int型,Boolean對(duì)應(yīng)于平常使用的布爾型,Pointer和Relation分別表示一對(duì)一和一對(duì)多的關(guān)聯(lián)數(shù)據(jù)類型。4.2.1課程表模塊數(shù)據(jù)庫(kù)設(shè)計(jì)如下表4.1所示為個(gè)人課程表數(shù)據(jù)庫(kù):屬性數(shù)據(jù)類型說(shuō)明備注objectIdString個(gè)人課表ID主鍵,不允許空UserPointer所屬用戶不允許為空Course_nameString課程名不允許為空WeekNumber每周上課時(shí)間不允許為空Section_numberNumber上課節(jié)數(shù)不允許為空Teacher_nameString任課教師姓名不允許為空ClassroomString上課地點(diǎn)不允許為空Week_StartNumber課程開(kāi)始周數(shù)不允許為空Week_endNumber課程結(jié)束周數(shù)不允許為空 表4.1如下表4.2所示為班級(jí)課程表數(shù)據(jù)屬性數(shù)據(jù)類型說(shuō)明備注ObjectString班級(jí)課本ID主鍵,不允許為空MajorString專業(yè)不允許為空ClassesString班級(jí)不允許為空Course_nameString課程名不允許為空WeekNumber每周上課日期不允許為空Section_numberNumber每周節(jié)數(shù)不允許為空Teacher_nameString任課老師名字不允許為空ClassroomString上課地點(diǎn)不允許為空Week_startNumber開(kāi)始周不允許為空Week_endNumber結(jié)束周不允許為空 表記事本模塊的數(shù)據(jù)庫(kù)設(shè)計(jì)如下表4.3為記事本記錄表:屬性數(shù)據(jù)類型說(shuō)明備注IdString記錄ID不允許為空ContentString記錄內(nèi)容允許為空PathString照片存儲(chǔ)路徑允許為空DateString添加時(shí)間不允許為空 表個(gè)人信息數(shù)據(jù)庫(kù)設(shè)計(jì)如下表4.4為個(gè)人信息表:屬性數(shù)據(jù)類型說(shuō)明備注ObjectIdString用戶id主鍵,不允許為空UsernameString用戶名不允許為空PasswordString用戶密碼不允許為空MajorString專業(yè)不允許為空ClassesString班級(jí)不允許為空IsClassBoolean是否已導(dǎo)入課表不允許為空PersonalCoursesRelation用戶個(gè)人課程不允許為空 表4.4第5章校園助手前端頁(yè)面設(shè)計(jì)5.1主程序界面設(shè)計(jì)及實(shí)現(xiàn)5.1.1主程序界面圖5-1圖5-2圖5-3上圖5-1、5-2和5-3分別對(duì)應(yīng)的是系統(tǒng)的四大模塊。5-1對(duì)應(yīng)的是課程表模塊的進(jìn)入頁(yè)面,通過(guò)點(diǎn)擊中心按鈕查看課本可以進(jìn)入課程表查看界面對(duì)課程表進(jìn)行增刪改查操作。5-2對(duì)應(yīng)的是記事本模塊和小應(yīng)用,在該界面可以通過(guò)點(diǎn)擊爛筆頭進(jìn)入文本編輯,點(diǎn)擊右上的照相機(jī)小圖標(biāo)直接進(jìn)入拍照界面點(diǎn)擊拍照后再進(jìn)行相關(guān)文本說(shuō)明。另外,還可以點(diǎn)擊計(jì)算器和小應(yīng)用進(jìn)入相關(guān)界面使用對(duì)應(yīng)功能。5-3對(duì)應(yīng)的是個(gè)人中心界面,通過(guò)點(diǎn)擊上方的“我的資料”進(jìn)入個(gè)人資料頁(yè)面,實(shí)現(xiàn)對(duì)個(gè)人資料的查看和編輯。另外個(gè)人中心界面還設(shè)置了使用幫助以及軟件申明等,幫助用戶更好地使用軟件,另外,客戶點(diǎn)擊退出登錄可退出程序界面,注銷用戶登錄信息。5.1.2主程序界面開(kāi)發(fā)原理主程序界面設(shè)計(jì)采用了目前比較主流的類似QQ的滑動(dòng)頁(yè)面布局。在一個(gè)主Activity中使用一個(gè)ViewPager嵌套了三個(gè)Fragment,并自定義了一個(gè)ChangeColorIconWithText類,實(shí)現(xiàn)了底部三個(gè)可點(diǎn)擊變色并切換fragment的按鈕。通過(guò)滑動(dòng)或點(diǎn)擊底部按鈕,可實(shí)現(xiàn)課程表、發(fā)現(xiàn)、我三個(gè)模塊的自由切換,非常地方便快捷。其中ChangeColorIconWithText類中主要是使用了繪圖的技術(shù)。如圖所示,主程序的課表模塊上只有一個(gè)藍(lán)色的查看課表按鈕,簡(jiǎn)潔大方,點(diǎn)擊即可進(jìn)入課表模塊定制自己個(gè)性化的課表了。主程序的發(fā)現(xiàn)部分,主要是使用LinearLayout實(shí)現(xiàn),通過(guò)給父LinearLayout和子LinearLayout定義不同的布局和背景顏色實(shí)現(xiàn),同時(shí),在爛筆頭部分還加入了拍照的快捷鍵,可方便地應(yīng)對(duì)需要及時(shí)拍照的突發(fā)情況。最后,在“我”的部分,設(shè)置了資料以及使用幫助和反饋,退出登錄等內(nèi)容,這個(gè)部分主要是使用一個(gè)ListView實(shí)現(xiàn),并且使用的是Android自帶的ListView布局,只需自己定義顯示的每條數(shù)據(jù)即可。5.2課表模塊界面設(shè)計(jì)及實(shí)現(xiàn)5.2.1課表模塊界面展示圖5-4如圖5-4所示為課程表顯示界面,該界面中,通過(guò)點(diǎn)擊圖片右下角的加號(hào)圖標(biāo)按鈕,可以彈出選擇提示,可進(jìn)行班級(jí)課表的自動(dòng)導(dǎo)入、批量刪除以及個(gè)人課表的添加和批量刪除。同時(shí),用戶可以通過(guò)點(diǎn)擊課程表中對(duì)應(yīng)課程對(duì)課程進(jìn)行操作,但是因?yàn)榘嗉?jí)課表是共享的,普通用戶沒(méi)有權(quán)限對(duì)其進(jìn)行修改,只有個(gè)人添加的課程可以進(jìn)行刪除和編輯操作,而班級(jí)課程只能通過(guò)上述的導(dǎo)入和批量刪除進(jìn)行修改。5.2.2個(gè)人課表添加界面 圖5-5 如圖5-5所示為個(gè)人課表添加界面,該界面中,填充課程名、教師名字、教師等信息后然后點(diǎn)擊添加按鈕,可實(shí)現(xiàn)對(duì)課程表信息的添加。5.2.3課表模塊界面開(kāi)發(fā)原理課表模塊的主界面主要是使用TextView實(shí)現(xiàn),所有的格子都是通過(guò)添加帶有格子背景的TextView實(shí)現(xiàn)的。課表最上面的星期一到星期日在layout的xml文件中上上定義,后面的空格子是通過(guò)for循環(huán)添加TextView實(shí)現(xiàn)。并且用戶每次添加或一門(mén)課程,主課程表界面都能進(jìn)行實(shí)時(shí)地更新。因?yàn)槲以谥鰽ctivity(即CourseTable)中將顯示個(gè)人課表的方法定義在了OnResume中,每次進(jìn)入CourseAddActivity后重新回到CourseTable中都會(huì)重新調(diào)用該方法,實(shí)現(xiàn)對(duì)課表的實(shí)時(shí)刷新。5.3記事本模塊界面設(shè)計(jì)及實(shí)現(xiàn)5.3.1記事本模塊界面展示 圖5-6 如圖5-6所示為記事本記錄展示模塊,在該界面中會(huì)將所有已添加的歷史記錄全部顯示出來(lái),可以點(diǎn)擊對(duì)應(yīng)記錄進(jìn)入相關(guān)界面對(duì)該記錄進(jìn)行查看和修改。在該界面中可以通過(guò)點(diǎn)擊圖片最下方的“新建”進(jìn)入記錄添加界面。 圖5-7如圖5-7則是通過(guò)“新建”進(jìn)入的記錄編輯界面。用戶可以在空白處添加相關(guān)文本內(nèi)容,然后點(diǎn)擊右上角的照相機(jī)小圖標(biāo)進(jìn)入拍照界面。拍照完畢后系統(tǒng)會(huì)自動(dòng)返回此界面點(diǎn)擊左上角的“√”符號(hào)即成功添加完一條完整的記錄。5.3.2.記事本模塊界面開(kāi)發(fā)原理記事本的主界面主要采用的是一個(gè)ListView的布局,適配器是自己定義的繼承于BaseAdapter的適配器MyAdapter,通過(guò)重寫(xiě)當(dāng)中BaseAdapter的getView()等方法,自定義listView的布局文件以及適配的數(shù)據(jù),能很好地實(shí)現(xiàn)ListView中每條數(shù)據(jù)的圖文結(jié)合。進(jìn)入記事本編輯界面,可在EditText中編輯文字內(nèi)容,照片是使用一個(gè)ImageView存放,點(diǎn)擊右上方的拍照按鈕進(jìn)入拍照界面,這里沒(méi)有調(diào)用系統(tǒng)相機(jī)而是自定義了一個(gè)基于android.hardware.Camera的相機(jī),通過(guò)自定義surfaceView和重寫(xiě)onPictureTaken方法實(shí)現(xiàn)相機(jī)個(gè)個(gè)性化,更符合用戶的需求。5.4計(jì)算器模塊界面設(shè)計(jì)及實(shí)現(xiàn)5.4.1計(jì)算器模塊界面展示圖5-8如圖5-8所示為計(jì)算器模塊,點(diǎn)擊科學(xué)—>標(biāo)準(zhǔn)按鈕,可實(shí)現(xiàn)標(biāo)準(zhǔn)計(jì)算器和普通計(jì)算器之間的切換,滿足用戶不同的使用需求。標(biāo)準(zhǔn)計(jì)算器可實(shí)現(xiàn)簡(jiǎn)單的加減乘除、切換到科學(xué)計(jì)算器就可以進(jìn)行正余弦的計(jì)算以及對(duì)數(shù)、指數(shù)的運(yùn)算,非常的方便,基本能滿足用戶的日常需要。5.4.2計(jì)算機(jī)模塊界面開(kāi)發(fā)原理由于計(jì)算器模塊的界面主要是由整齊劃一的按鈕組成,所以實(shí)現(xiàn)起來(lái)也較為簡(jiǎn)單,主要是由LinearLayout嵌套組成,再在LinearLayout里面定義按鈕。其中輸入框是由兩個(gè)TextView組成,以防止輸入計(jì)算數(shù)據(jù)過(guò)多,造成無(wú)法顯示或者為了顯示數(shù)據(jù)破壞了界面的美觀性等情況。5.5小應(yīng)用模塊界面設(shè)計(jì)及實(shí)現(xiàn)5.5.1小應(yīng)用模塊界面展示 圖5-9如圖5-9小應(yīng)用模塊主要就是開(kāi)發(fā)了一個(gè)數(shù)獨(dú)游戲,用戶每點(diǎn)擊一個(gè)空格就會(huì)彈出當(dāng)前單元格所能填入的數(shù)字。當(dāng)空格內(nèi)沒(méi)有可供填入的數(shù)字時(shí)會(huì)提示用戶出錯(cuò)了,詢問(wèn)用戶是否重置游戲。5.5.2小應(yīng)用模塊界面開(kāi)發(fā)原理數(shù)獨(dú)游戲的界面開(kāi)發(fā)主要是使用了Android繪圖,自定義了一個(gè)繼承于View的ShuduView,并重寫(xiě)其中的onDraw方法,定義四根畫(huà)筆分別用于繪制橫向、縱向的線,以及數(shù)字。代碼實(shí)現(xiàn)如下(以黑畫(huà)筆隨意繪制一根斜線為例):PaintlightPaint=newPaint();lightPaint.setColor(Color.BLACK);canvas.drawLine(0,0,200,200,lightPaint);在上面的界面圖中可以看到數(shù)獨(dú)中的單元格邊界線就像一個(gè)凹槽一樣,有一種刻進(jìn)去的感覺(jué),這主要是通過(guò)先畫(huà)一根深一點(diǎn)的線再在旁邊畫(huà)一根稍淺的線實(shí)現(xiàn)。5.6個(gè)人中心模塊界面設(shè)計(jì)及實(shí)現(xiàn)5.6.1個(gè)人中心模塊界面展示 圖5-10 如圖5-10所示為個(gè)人中心界面中的“我的資料”子模塊,在該模塊中可以對(duì)用戶的個(gè)人信息進(jìn)行查看修改。此外,用戶還能夠在此界面查看軟件的使用幫助和軟件的基本信息以及登出操作。5.6.2個(gè)人中心模塊界面開(kāi)發(fā)原理個(gè)人中心模塊的界面開(kāi)發(fā)比較簡(jiǎn)單,就是用一個(gè)簡(jiǎn)單風(fēng)格的ListView來(lái)實(shí)現(xiàn)的,再使用一個(gè)ArrayAdapter作為適配器,將列表中的數(shù)據(jù)適配上去即可。上方我的資料和那個(gè)小圖標(biāo)部分,是使用一個(gè)TextView再將其DrawableLeft屬性定義為一張圖片來(lái)實(shí)現(xiàn)。校園助手后臺(tái)開(kāi)發(fā)校園助手的后臺(tái)開(kāi)發(fā)主要分為登錄模塊、課程表模塊,記事本模塊、計(jì)算器及小應(yīng)用模塊等幾個(gè)主要模塊,在前面的數(shù)據(jù)庫(kù)設(shè)計(jì)中有提到,其中登錄模塊、課程表模塊的數(shù)據(jù)庫(kù)是建立在Bmob移動(dòng)云平臺(tái)上面,因此字段采用的是Bmob的數(shù)據(jù)類型,而記事本模塊的數(shù)據(jù)庫(kù)采用的是Android的本地?cái)?shù)據(jù)庫(kù)SQLite,因此幾個(gè)模塊之間在數(shù)據(jù)庫(kù)的開(kāi)發(fā)上面也會(huì)有所不同,接下來(lái)本文將對(duì)程序結(jié)構(gòu)以及這幾個(gè)模塊的具體實(shí)現(xiàn)做一個(gè)詳細(xì)的介紹。6.1程序結(jié)構(gòu)本校園助手應(yīng)用程序開(kāi)發(fā)的eclipse工程名為CampusAssistant,程序源代碼的主要結(jié)構(gòu)如圖,由于程序涉及的功能模塊相對(duì)而言較多,因此定義了不同的包用來(lái)存放不同功能的程序源文件。

程序各源文件包主要說(shuō)明如下:包名主要文件說(shuō)明com.mimi.uiLoginActivity等用戶登錄、主程序界面以及課程表模塊的主要代碼com.mimi.dbUser.java等存放數(shù)據(jù)庫(kù)對(duì)象com.mimi.fragmentFoundFragment.java等存放主界面的三個(gè)Fragmentcom.mimi.noteNoteActivity.java等記事本模塊的程序?qū)崿F(xiàn)com.mimi.calculatorCalculatorActivity.java計(jì)算機(jī)的程序?qū)崿F(xiàn)com.mimi.sudokuShuduView.java等小應(yīng)用中數(shù)獨(dú)游戲的程序?qū)崿F(xiàn)com.mimi.utilsImageThumbnail.java等程序用到的工具類,如制作縮略圖,判斷用戶是否聯(lián)網(wǎng)等6.2登錄模塊登錄模塊主要是負(fù)責(zé)用戶的登錄、注冊(cè)和注銷等幾個(gè)主要功能的實(shí)現(xiàn)。當(dāng)然這個(gè)模塊的實(shí)現(xiàn)主要是通過(guò)對(duì)Bmob上的User表進(jìn)行增刪改查,主要是通過(guò)調(diào)用Bmob提供的Api接口來(lái)實(shí)現(xiàn)相應(yīng)的操作。Bmob提供了一個(gè)專門(mén)的用戶類--BmobUser來(lái)自動(dòng)處理用戶賬戶管理所需的功能。有了這個(gè)類,便可以在應(yīng)用程序中添加用戶賬戶。BmobUser是BmobObject的一個(gè)子類,它繼承了BmobObject所有的方法,具有BmobObject相同的功能。不同的是,BmobUser增加了一些特定的關(guān)于用戶賬戶管理相關(guān)的功能。BmobUser除了從BmobObject繼承的屬性外,還有幾個(gè)特定的屬性:username:用戶的用戶名(必需)。password:用戶的密碼(必需)。而且,開(kāi)發(fā)者可以通過(guò)繼承擴(kuò)展BmobUser自定義自己的用戶類。本次程序開(kāi)發(fā)中的登錄模塊就是通過(guò)BmobUser類來(lái)實(shí)現(xiàn)的。要使用BmobUser類只需在工程中導(dǎo)入Bmob官方提供的AndroidSdk,然后創(chuàng)建BmobUser對(duì)象即可。BmobUseruser=newBmobUser()。首先是注冊(cè)用戶部分,主要程序?qū)崿F(xiàn)如下(以注冊(cè)用戶zhangsan為例):BmobUserbu=newBmobUser();bu.setUsername("zhangsan");bu.setPassword("123456");bu.signUp(this,newSaveListener(){//調(diào)用signUp方法即可。@OverridepublicvoidonSuccess(){//注冊(cè)成功//TODOAuto-generatedmethodstubtoast("注冊(cè)成功:");}@OverridepublicvoidonFailure(intcode,Stringmsg){//注冊(cè)失敗。//TODOAuto-generatedmethodstubtoast("注冊(cè)失敗:"+msg);}});然后是用戶登錄模塊(也以“zhangsan”登錄為例):BmobUserbu2=newBmobUser();bu2.setUsername("zhangsan"); bu2.setPassword("123456"); bu2.login(this,newSaveListener(){//調(diào)用login方法登錄。publicvoidonSuccess(){//TODOAuto-generatedmethodstubtoast("登錄成功:");}publicvoidonFailure(intcode,Stringmsg){//TODOAuto-generatedmethodstubtoast("登錄失敗:"+msg);}});然后在程序開(kāi)發(fā)過(guò)程中可以如果需要獲取當(dāng)前登錄用戶的信息,也可以通過(guò)BmobUser類及時(shí)獲取,非常的方便。主要實(shí)現(xiàn)如下:BmobUserbmobUser=BmobUser.getCurrentUser(this);如果在程序中擴(kuò)展了用戶類,可直接調(diào)用MyUseruserInfo=BmobUser.getCurrentUser(this,MyUser.class);得到所需要的用戶的所有信息。然后用戶可實(shí)時(shí)更新自己的個(gè)人資料,也是通過(guò)Bmob提供的Update方法來(lái)實(shí)現(xiàn),跟前面的大同小異,此處不再贅述。最后是用戶注銷登錄操作的程序?qū)崿F(xiàn),相對(duì)來(lái)說(shuō),用戶退出操作的程序?qū)崿F(xiàn)較為簡(jiǎn)單,只需如下的幾行代碼:BmobUser.logOut(this);//清除緩存用戶對(duì)象BmobUsercurrentUser=BmobUser.getCurrentUser(this);6.3課程表模塊課程表模塊也是主要通過(guò)Bmob提供的一些方法接口來(lái)實(shí)現(xiàn)。課程表模塊主要是對(duì)Bmob上的兩張表--班級(jí)課表和個(gè)人課表進(jìn)行增刪改查。首先是用戶已有課表的顯示實(shí)現(xiàn):Bmob專門(mén)提供了一個(gè)BmobQuery對(duì)象用于查詢。在課程表的主ActivityCourseTable.Activity中,通過(guò)查詢獲得用戶個(gè)人課表和班級(jí)課表的信息展示。下面主要展示一下班級(jí)課表查詢代碼,自動(dòng)批量導(dǎo)入班級(jí)課表主要由此實(shí)現(xiàn),個(gè)人課表查詢代碼同理不再贅述。BmobQuery<ClassCourse>query=newBmobQuery<ClassCourse>();query.addWhereEqualTo("major",user.getMajor());query.addWhereEqualTo("classes",user.getClasses());query.findObjects(this,NewFindListener<ClassCourse>){@OverridepublicvoidonError(intarg0,Stringarg1){//TODOAuto-generatedmethodstub }publicvoidonSuccess(List<ClassCourse>courses){}然后是用戶添加和編輯課個(gè)人課表的程序?qū)崿F(xiàn):(此處以當(dāng)前用戶添加英語(yǔ)課為例)BmobUseruser=BmobUser.getCurrentUser();PersonalCoursec=newPersonalCourse();c.setUser(user);c.setCourseName(“英語(yǔ)”);c.save(CourseAddActivity.this,newSaveListener(){@OverridepublicvoidonError(intarg0,Stringarg1){//TODOAuto-generatedmethodstub }publicvoidonSuccess(){}同理,如果是編輯則調(diào)用c.update(this,newUpdateListener(){});即可完成課表的添加和編輯。最后是課表的刪除操作,也是整個(gè)課程表模塊比較簡(jiǎn)單的部分,假設(shè)需要?jiǎng)h除課程c,只需調(diào)用c.delete(Contextcontext)方法即可實(shí)現(xiàn)。其實(shí)課程表模塊還有一個(gè)比較核心的方法就是對(duì)查詢到的課程進(jìn)行展示,以及對(duì)新添加課程后課程表界面實(shí)時(shí)刷新的方法--showCourseInfo(),如前面課程表界面開(kāi)發(fā)原理當(dāng)中所說(shuō)課程表格子背景都是通過(guò)創(chuàng)建TextView來(lái)實(shí)現(xiàn),課程信息的展示同時(shí)也是通過(guò)創(chuàng)建TextView,同時(shí)使TextView通過(guò)課程的星期和節(jié)數(shù)來(lái)進(jìn)行偏移。并且通過(guò)給每天的課程配上不同的顏色,便于用戶區(qū)分,使程序擁有更好的用戶體驗(yàn)。6.4記事本模塊的實(shí)現(xiàn)如前所述,記事本模塊采用SQLite本地?cái)?shù)據(jù)庫(kù),因此,記事本模塊用戶對(duì)記錄的添加、編輯和刪除操作主要也是通過(guò)對(duì)SQLite本地?cái)?shù)據(jù)庫(kù)的增刪改查來(lái)實(shí)現(xiàn)。首先,創(chuàng)建一個(gè)繼承于SQLiteOpenHelper的NoteDB類,負(fù)責(zé)創(chuàng)建數(shù)據(jù)庫(kù),建表。主要通過(guò)編寫(xiě)構(gòu)造方法和在onCreate中調(diào)用建表的SQL語(yǔ)句實(shí)現(xiàn)。之后如果要對(duì)本數(shù)據(jù)庫(kù)進(jìn)行增刪改查,只需通過(guò)創(chuàng)建NoteDB對(duì)象,然后調(diào)用其getReadableDatabase()或getWritableDatabase()得到可供操作的SQLiteDatabase對(duì)象。主要代碼如下:noteDB=newNoteDB(this);dbReader=noteDB.getReadableDatabase();dbWriter=noteDB.getWritableDatabase();對(duì)SQLite中的數(shù)據(jù)表進(jìn)行增刪改只需依次調(diào)用SQLiteDatabase對(duì)象的以下方法即可:Longinsert(Stringtable,StringnullColumnHack,ContentValuesvalues);Delete(Stringtable,StringwhereClause,String[]whereArgs);Update(Stringtable,ContentValuesvalues,StringwhereClause,String[]whereArgs);至于查詢方法,SQlite那個(gè)本身提供的query方法需要傳入的參數(shù)過(guò)多,因此原生的sql語(yǔ)句會(huì)更方便,在此基礎(chǔ)上只需調(diào)用一個(gè)dbReader.rawQuery(sql,null)即可得到查詢成功后的cursor對(duì)象。其實(shí)記事本主程序界面歷史記錄的顯示就是通過(guò)這個(gè)查詢功能實(shí)現(xiàn)的,而且在這里實(shí)現(xiàn)的是對(duì)數(shù)據(jù)庫(kù)里以往添加記錄的倒序查詢,按時(shí)間由近到遠(yuǎn)排序,符合記事本的開(kāi)發(fā)邏輯,查詢得到的Cursor對(duì)象再傳給適配器進(jìn)行信息的展示。程序主要實(shí)現(xiàn)代碼如下:privatevoidselectDB(){Stringsql="select*from"+NoteDB.TABLE_NAME+"orderbytimedesc";Cursorcursor=dbReader.rawQuery(sql,null);MyAdapteradapter=newMyAdapter(this,cursor); }為了實(shí)現(xiàn)數(shù)據(jù)的實(shí)時(shí)刷新,選擇了在記事本主程序NoteActivity的OnResume方法中調(diào)用selectDB(),因此,每當(dāng)當(dāng)前頁(yè)面失去焦點(diǎn)后再返回當(dāng)前頁(yè)面,就會(huì)重新調(diào)用一次OnResume方法,重新進(jìn)行歷史記錄查詢,實(shí)現(xiàn)記錄的實(shí)時(shí)刷新。記事本模塊除了對(duì)數(shù)據(jù)表的增刪改查還有一個(gè)比較核心的功能就是拍照功能的實(shí)現(xiàn)。該功能主要通過(guò)android.hardware.camera來(lái)實(shí)現(xiàn)。重寫(xiě)CallBack類中的方法,由于在前面提到camera拍照界面取景是用surfaceView實(shí)現(xiàn),在這里重寫(xiě)CallBack中的surfaceDestroyed()、surfaceCreated()、以及surfaceChanged()方法可控制拍照取景,拍照的方向等,再調(diào)用SurfaceView的getHolder().addCallBack(newCallBack{...})方法綁定到surfaceView,即可以定制自己個(gè)性化的相機(jī)。點(diǎn)擊按鈕拍照后,可調(diào)用Camera的takePicture(...)方法得到拍照后傳回的數(shù)據(jù),將其保存在手機(jī)本地,并將圖片路徑存入數(shù)據(jù)庫(kù),便于以后的查看。6.5計(jì)算器模塊的實(shí)現(xiàn)計(jì)算器模塊涉及到的功能比較多,所以相對(duì)來(lái)說(shuō)代碼會(huì)比較復(fù)雜一點(diǎn)。程序中除了兩個(gè)主Activity用戶界面顯示和定義點(diǎn)擊事件外,還定義了個(gè)Java類,Judge.java和GetValue.java分別用于字符串的判斷處理和值得計(jì)算。下面主要對(duì)功能差不多的一些按鈕及其點(diǎn)擊事件做一個(gè)歸類描述。用戶點(diǎn)擊數(shù)字按鈕(0-9),程序會(huì)先判斷當(dāng)前顯示有沒(méi)有輸入再進(jìn)行字符串的追加。用戶點(diǎn)擊加減乘除按鈕,程序會(huì)先判斷當(dāng)前顯示屏中的字符串最后一個(gè)字符是否為運(yùn)算符,如果是則將字符串最后一位去掉(string.substring(0,string.length-1)),再加上當(dāng)前添加的運(yùn)算符,組成當(dāng)前顯示屏的字符串。用戶如果點(diǎn)擊輸入小數(shù)點(diǎn),程序會(huì)調(diào)用Judge的judge1()方法判斷最后一個(gè)字符是否是數(shù)字再進(jìn)行相應(yīng)的字符串追加。計(jì)算器當(dāng)中最復(fù)雜的是輸入等號(hào)后程序?qū)斎氡磉_(dá)式的運(yùn)算,首先調(diào)用GetValue中的dispose1(Stringstr)方法判斷str中是否有“π”,將其替換為數(shù)值,再調(diào)用GetValue中的bracket_dispose()處理字符串當(dāng)中的括號(hào)表達(dá)式,主要思路是:遇到正括號(hào)就將它在字符串里的索引保存在一個(gè)鏈表里(插在鏈表頭),遇到第一個(gè)反括號(hào)就處理這個(gè)括號(hào)里的表達(dá)式(取出鏈表第一個(gè)元素,然后根據(jù)這兩個(gè)索引取出表達(dá)式,會(huì)調(diào)用一個(gè)專門(mén)處理log,ln,sin,cos,tan等的special_dispose函數(shù),將反回一個(gè)自由加減乘除的表達(dá)式,再調(diào)用alg_dispose函數(shù),返回一個(gè)可能還含有l(wèi)og,ln,sin,cos,tan等的但沒(méi)有括號(hào)的表達(dá)式。最后再將得出的表達(dá)式結(jié)果顯示在顯示屏上。6.6小應(yīng)用模塊的實(shí)現(xiàn)小應(yīng)用模塊主要開(kāi)發(fā)了一個(gè)數(shù)獨(dú)游戲,數(shù)獨(dú)游戲的實(shí)現(xiàn)邏輯其實(shí)也比較簡(jiǎn)單。主要功能的實(shí)現(xiàn)都是通過(guò)定義的一個(gè)Game類來(lái)進(jìn)行封裝,這樣能很好地實(shí)現(xiàn)程序的跨平臺(tái)性,這個(gè)定義的Game類同樣也能運(yùn)行在其他平臺(tái)(如PC端)上。首先在Game類里面定義幾組數(shù)獨(dú)的原始數(shù)據(jù),整個(gè)數(shù)獨(dú)界面由9×9一共81個(gè)單元格組成,因此定義一個(gè)大小為81的整型數(shù)組用于存取每個(gè)單元格的數(shù)據(jù),如果沒(méi)有數(shù)據(jù),則數(shù)組中此項(xiàng)為0。定義了這個(gè)整型數(shù)組,就可以很方便地直接獲得指定坐標(biāo)單元格中的數(shù)據(jù),這在程序中通過(guò)定義的getTileString(intx,inty)方法來(lái)實(shí)現(xiàn)。游戲開(kāi)始,用戶沒(méi)點(diǎn)擊一個(gè)單元格,程序就能自動(dòng)計(jì)算出這個(gè)單元格的不可用數(shù)據(jù)數(shù)組,從而將彈出對(duì)話框中的不可用數(shù)據(jù)設(shè)為不可見(jiàn)。因此用戶可以方便地選擇要填入的數(shù)字。程序中計(jì)算不可用數(shù)組,主要通過(guò)calculateUsedTiles(intx,inty)方法實(shí)現(xiàn),主要代碼如下:publicint[]calculateUsedTiles(intx,inty){intc[]=newint[9];for(inti=0;i<9;++i){//計(jì)算在y軸(列)方向上那些數(shù)字不可用 if(i==y){//如果這是用戶點(diǎn)擊的格子 continue;}intt=getTile(x,i);if(t!=0){ c[t-1]=t; } }for(inti=0;i<9;++i){//計(jì)算在y軸(列)方向上那些數(shù)字不可用 if(i==x){ continue; } intt=getTile(i,y); if(t!=0){ c[t-1]=t; } }intstartX=(x/3)*3;intstartY=(y/3)*3;//計(jì)算在九宮格內(nèi)那些數(shù)字不可用。for(inti=startX;i<startX+3;++i){for(intj=startY;j<startY+3;++j){if(i==x&&j==y){ continue; } intt=getTile(i,j); if(t!=0){ c[t-1]=t; } }}當(dāng)用戶點(diǎn)擊格子計(jì)算出的不可用數(shù)字?jǐn)?shù)組大小等于9時(shí),提醒用戶出錯(cuò)并詢問(wèn)是否重置游戲。結(jié)論本次基于Android平臺(tái)的校園助手應(yīng)用程序的開(kāi)發(fā),切合現(xiàn)今學(xué)生的實(shí)際

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論