版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
摘要在日常的生活中,疾病是我們每個(gè)人不可避免會發(fā)生的一件事。由于藥物具有兩重性,一方面可以治療疾病,另一方面也可能產(chǎn)生不良反應(yīng),因此安全、合理用藥是非常重要的。本應(yīng)用是基于安卓平臺開發(fā)的,以java語言為基礎(chǔ),從合理、安全用藥的實(shí)際情況出發(fā),在了解用戶需求的基礎(chǔ)上,提出了為用戶提供用藥指南的基本目標(biāo),并且實(shí)現(xiàn)了根據(jù)病癥找藥和相關(guān)藥物的使用說明以及病癥特征的具體介紹,幫助用戶提供用藥指導(dǎo),使用戶能夠更合理、安全的用藥。本文首先對Android的研究意義,技術(shù)簡介以及開發(fā)環(huán)境進(jìn)行介紹,然后就應(yīng)用的需求進(jìn)行一定的分析,設(shè)計(jì)出應(yīng)用的流程和實(shí)現(xiàn)模塊,最后運(yùn)用Android技術(shù)實(shí)現(xiàn)應(yīng)用的開發(fā),給出應(yīng)用的效果圖,具體介紹了應(yīng)用的各個(gè)功能模塊的設(shè)計(jì)特點(diǎn)和具體的實(shí)現(xiàn)方法。通過程序的設(shè)計(jì),了解到程序中設(shè)計(jì)的不足,最后做出總結(jié)。關(guān)鍵字:界面布局,ListView圖文混排,異步網(wǎng)絡(luò)請求數(shù)據(jù),數(shù)據(jù)解析,數(shù)據(jù)庫設(shè)計(jì)AbstractIndailylife,diseaseisunavoidableeachofusoneofthethingswillhappen.Becausethedrughasduality,ontheonehand,cancurediseases,ontheotherhandcanalsocauseadversereactions,soitisveryimportanttosafeandrationaldruguse.Thisapplicationisbasedontheandroidplatformdevelopment,onthebasisoftheJavalanguage,startingfromtheactualsituationofreasonable,safedruguse,onthebasisoftheunderstandingofuserneeds,putforwardtoprovidethebasicpurposeofmedicationguide,andimplementsaccordingtoconditionsformedicineandinstructionsontheuseofthedrugsanddiseasecharacteristics,thedetailedintroductionofhelptheusertoprovideguidelines,enablesuserstoamorereasonable,safedruguse.ThisarticlefirstsignificancetotheresearchofAndroid,introducesthetechnologyintroductionanddevelopmentenvironment,andthenmakesacertainanalysisofapplicationrequirements,designtheapplicationprocessandtheimplementationofthemodule,thelastuseofAndroidtechnologyapplicationdevelopment,applicationeffectisgiven,andconcretelyintroducesthedesigncharacteristicsoftheapplicationofeachfunctionmoduleandtheconcreteimplementationmethod.Throughthedesignprogram,learnedintheprogramdesign,finallymakeasummary.Keywords:interfacelayout,ListViewbymixed,asynchronousnetworkrequestdata,dataanalysis,databasedesign目錄TOC\o"1-3"\h\u263581引言 1105641.1課題研究意義 1149721.2技術(shù)簡介 1250541.3國內(nèi)外研究情況 2287471.4開發(fā)工具安裝 2138812需求分析和總體設(shè)計(jì) 4215002.1需求分析 488342.2功能模塊設(shè)計(jì) 572162.3總體框架設(shè)計(jì)和實(shí)現(xiàn)方法 5105773首頁設(shè)計(jì)和具體實(shí)現(xiàn) 6219193.1安卓的基本控件和容器的介紹 6202463.2首頁界面設(shè)計(jì)和實(shí)現(xiàn) 6151653.2.1首頁界面 6128203.2.2首頁布局設(shè)計(jì) 732943.3.3首頁功能實(shí)現(xiàn) 8110074功能模塊的設(shè)計(jì)和具體實(shí)現(xiàn) 11163344.1保健食品 119514.2對癥找藥 152984.3家庭藥箱 17319314.4搜索 20327675抽屜功能的設(shè)計(jì)和具體實(shí)現(xiàn) 22243855.1設(shè)置 22259845.2登錄 2323375.3關(guān)于 24214606結(jié)束語 2522847致謝 26184948參考文獻(xiàn) 271引言1.1課題研究意義隨著計(jì)算機(jī)的發(fā)展和智能手機(jī)的普及,由于安卓操作系統(tǒng)的可操作性強(qiáng),使安卓迅速的成為現(xiàn)在主流的操作系統(tǒng),安卓移動應(yīng)用也越來越受到人們的喜愛。Android是由Google推出的一款開放的嵌入式操作系統(tǒng)平臺,Android聚集了來自世界各地的開發(fā)者,越來越多的創(chuàng)意和思想被應(yīng)用到Android應(yīng)用程序的開發(fā)中,它在國內(nèi)具有相當(dāng)強(qiáng)勁的競爭優(yōu)勢,Android移動開發(fā)平臺十分適合我國國內(nèi)的開發(fā)環(huán)境。伴隨著GoogleAndroid操作系統(tǒng)的發(fā)展,以及移動網(wǎng)絡(luò)的迅猛發(fā)展,基于Android應(yīng)用的移動開發(fā)備受關(guān)注。因此在了解AndroidSDK的基礎(chǔ)上,我開發(fā)了一款適應(yīng)于Android操作系統(tǒng)的移動應(yīng)用。本文從Android移動開發(fā)基礎(chǔ)出發(fā),在了解用戶需求的基礎(chǔ)上,設(shè)計(jì)出了完全適合Android操作系統(tǒng)的移動應(yīng)用,并且詳細(xì)闡述了Android的sqlite輕量級數(shù)據(jù)庫存儲技術(shù)以及各個(gè)界面的布局設(shè)計(jì)過程和網(wǎng)絡(luò)請求數(shù)據(jù)等。1.2技術(shù)簡介安卓是由Google公司推出的基于Linux平臺的開源手機(jī)系統(tǒng),由操作系統(tǒng)、中間件、用于界面和應(yīng)用軟件組成主要適用于便攜設(shè)備。Android的分層結(jié)構(gòu):應(yīng)用程序、應(yīng)用程序框架、系統(tǒng)運(yùn)行庫層、Linux內(nèi)核。如圖1-1圖1-1Android分層結(jié)構(gòu)圖Android的優(yōu)點(diǎn)就是開源,便于開發(fā)人員更清楚的把握實(shí)現(xiàn)細(xì)節(jié),提高開發(fā)人員的技術(shù)水平,在軟件開發(fā)中限制相對比較少,使用戶可以用到許多免費(fèi)的軟件。在Android中,開發(fā)者可以使用Java作為編程語言來開發(fā)應(yīng)用也可以通過C/C++等作為編程語言來開發(fā)應(yīng)用程序。在Java開發(fā)方面Android支持使用Java作為編程語言來開發(fā)應(yīng)用程序,Android的java開發(fā)從接口到功能,都有很多的變化,由于java虛擬機(jī)本身的效率和資源占用,google重新設(shè)計(jì)了Android的java,以便能提高效率和減少資源的占用。Android本身是一個(gè)權(quán)限分立的操作系統(tǒng),在這個(gè)操作系統(tǒng)中,每個(gè)應(yīng)用都以唯一的一個(gè)系統(tǒng)識別身份運(yùn)行。系統(tǒng)的更多的安全功能通過權(quán)限機(jī)制提供。權(quán)限可以限制某個(gè)特定的進(jìn)程的特定操作,也可以限制每個(gè)URI權(quán)限對特定的數(shù)據(jù)段的訪問。Android的安全架構(gòu)的核心設(shè)計(jì)思想是,在默認(rèn)的設(shè)置下,所有的應(yīng)用都沒有權(quán)限對其他的應(yīng)用、用戶等進(jìn)行較大的影響的操作。總而言之,Android是一款開放式的操作系統(tǒng),并且提供了強(qiáng)大的SDK庫和開放的理念,隨著Android的快速發(fā)展,越來越多的編程者用各種語言開發(fā)Android應(yīng)用程序,受到了眾多開發(fā)者的歡迎成為真正意義上的開放式的操作系統(tǒng)。沒有開發(fā)經(jīng)驗(yàn)的開發(fā)者可以不斷學(xué)習(xí)提高開發(fā)的能力,經(jīng)驗(yàn)豐富的開發(fā)者可以方便的擴(kuò)展到Android移動平臺上來,利用Android的獨(dú)特功能開發(fā)新穎的移動應(yīng)用。1.3國內(nèi)外研究情況近年來,隨著科技的迅速發(fā)展以及移動互聯(lián)網(wǎng)的寬帶進(jìn)一步擴(kuò)展,智能手機(jī)的使用也越來越廣泛。在眾多智能手機(jī)操作系統(tǒng)中,谷歌的移動平臺Android操作系統(tǒng)因它開源的優(yōu)勢成為手機(jī)市場最受歡迎的智能操作系統(tǒng)平臺。Android的各種應(yīng)用程序在市場中都有比較好的發(fā)展趨勢,尤其以手機(jī)移動應(yīng)用更是受到人們的廣泛關(guān)注與喜愛。因?yàn)槭謾C(jī)移動應(yīng)用的便攜性和實(shí)用性,使得Android手機(jī)擁有著龐大的用戶人群,體現(xiàn)了Android手機(jī)應(yīng)用的巨大的發(fā)展?jié)摿?。Android系統(tǒng)自推出以來,就以明顯的優(yōu)勢逐漸擴(kuò)大占有的市場份額,尤其在國外,android系統(tǒng)處于蓬勃發(fā)展的階段。在國內(nèi)Android系統(tǒng)的應(yīng)用已不僅局限于手機(jī)產(chǎn)業(yè),而是已經(jīng)擴(kuò)張到相關(guān)領(lǐng)域,例如平板電腦、車載系統(tǒng)、電視STB、智能電器、智能會議系統(tǒng)等。課題以研究如何在Android手機(jī)平臺上開發(fā)手機(jī)應(yīng)用,研究學(xué)習(xí)了安卓的關(guān)鍵技術(shù)和具體的開發(fā)環(huán)境,該應(yīng)用能夠比較完整的實(shí)現(xiàn)其功能,方便人們查詢疾病和藥品,為人們的安全用藥和合理用藥提供了便利。1.4開發(fā)工具安裝為了在PC主機(jī)上得到Android的開發(fā)環(huán)境,我們選擇在Windows操作系統(tǒng)中進(jìn)行對Android開發(fā)環(huán)境的搭建,具體步驟如下:(1)JDK安裝首先下載JDK,按照提示安裝成功后,最重要的是進(jìn)行環(huán)境變量的配置,步驟如下:我的電腦->屬性->高級->環(huán)境變量->系統(tǒng)變量中添加以下環(huán)境變量:Java_HOME值為:C:\ProgramFiles\Java\jdk1.6.0_20(安裝JDK的目錄)CLASSPATH值為:.;%Java_HOME%lib\tools.jar;%Java_HOME%\lib\dt.jar;%Java_HOME%\bin;Path值:添加C:\ProgramFiles\Java\jdk1.6.0_20\bin;(2)Eclipse安裝可下載一個(gè)綠色版的Eclipse,無需安裝,和安裝版一樣都能為Android開發(fā)提供功能。(3)AndroidSDK安裝在AndroidDevelopers下載Android-sdk_r07-windows.zip,下載完成后解壓到任意路徑。運(yùn)行SDKManager.exe,點(diǎn)擊AvailablePackage。選擇希望安裝的SDK及其文檔或者其它包,點(diǎn)擊InstallationSelected、AcceptAll、InstallAccepted,開始下載安裝所選包。下載完成后出現(xiàn)所有Android-sdk_r07-windows文件夾內(nèi)容;(4)ADT安裝ADT實(shí)際上是一個(gè)工具,它可以連接sdk和Eclipse,幫助Eclipse找到sdk打開Eclipse界面,進(jìn)入進(jìn)入菜單中的“Help”->“InstallNewSoftware”,點(diǎn)擊Add按鈕彈出對話框要求輸入Name和Location,完成之后,選擇Window>Preferences;在左邊的面板選擇Android,然后在右側(cè)點(diǎn)擊Browse;并選中SDK路徑,本機(jī)為;D:\YJSH\Android\Android-sdk_r07-windows;點(diǎn)擊Apply、OK。配置完成。(5)創(chuàng)建AVD為使Android應(yīng)用程序可以在模擬器上運(yùn)行,必須創(chuàng)建AVD,步驟如下:在Eclipse中,選擇Windows>AndroidSDKandAVDManager,點(diǎn)擊左側(cè)面板的VirtualDevices,再右側(cè)點(diǎn)擊New,填入Name,選擇Target的API,SDCard大小任意,Skin隨便選,Hardware目前保持默認(rèn)值,點(diǎn)擊CreateAVD即可完成創(chuàng)建AVD。
2需求分析和總體設(shè)計(jì)2.1需求分析結(jié)合日常用藥的實(shí)際情況,根據(jù)用戶的需求,分析出主要實(shí)現(xiàn)以下幾個(gè)功能:A)對癥找藥1.通過病癥查找病癥的具體介紹,方便人們及時(shí)發(fā)現(xiàn)疾病,預(yù)防疾病并通過病癥的介紹找到治療該疾病的藥物。2.可以查尋到關(guān)于疾病的治療方法,方便人們根據(jù)自己的身體狀況找到積極治療疾病的方法。B)保健食品1.根據(jù)用戶的需求提供如改善睡眠等要求來查找合適的保健品,根據(jù)保健品的種類找到合適的藥物。2.找到合適的藥物查詢到藥物的具體介紹食用方法、注意事項(xiàng)等。方便人們了解藥物的特性不僅給生活中用藥提供了方便還提高人們的健康意識和對藥物、保健的了解。C)家庭藥箱1.家庭藥箱可以動態(tài)添加個(gè)人的藥箱,使用戶可以找到自己的藥箱。2.當(dāng)藥箱不需要是時(shí),可以動態(tài)的刪除個(gè)人藥箱。D)搜索根據(jù)要查找的藥品,用戶輸入藥品的首字母即可以查詢出藥品的名字和藥品的生產(chǎn)公司。E)設(shè)置設(shè)置中可以設(shè)置清除緩存來清除應(yīng)用中的緩存。F)登錄通過登錄功能可以登錄到官方網(wǎng)站查詢關(guān)于疾病和藥物的相關(guān)信息等了解疾病和做到合理、安全的用藥。G)關(guān)于簡要介紹關(guān)于應(yīng)用的信息和相關(guān)的功能。2.2功能模塊設(shè)計(jì)系統(tǒng)中的主要功能模塊及其結(jié)構(gòu)關(guān)系如圖2-1:用藥指南用藥指南左抽屜搜索登錄對癥找藥保健食品家庭藥箱設(shè)置關(guān)于圖2-1功能模塊圖2.3總體框架設(shè)計(jì)和實(shí)現(xiàn)方法本設(shè)計(jì)按照所要實(shí)現(xiàn)的功能和總體的設(shè)計(jì)分為以下的模塊如圖2-2:用藥指南用藥指南界面布局?jǐn)?shù)據(jù)請求數(shù)據(jù)解析數(shù)據(jù)庫設(shè)計(jì)緩存處理圖2-2功能設(shè)計(jì)圖3首頁設(shè)計(jì)和具體實(shí)現(xiàn)3.1安卓的基本控件和容器的介紹(1)安卓的容器常用的有LinearLayout線性布局,主要有兩種類型,水平的線性布局和垂直的線性布局。水平的線性布局就是LinearLayout中的控件按照水平的方式排列;垂直的線性布局就是LinearLayout中的控件按照垂直的方式排列。RelativeLayout相對布局,相對布局是一個(gè)控件的位置決定于它和其他控件的關(guān)系,相對布局的好處就是比較靈活,控件的位置擺放不像線性布局那樣單一,可以任意擺放控件的位置,但是缺點(diǎn)是掌握比較復(fù)雜,控件的位置設(shè)置比較繁瑣。FrameLayout框架布局,又叫幀布局,就是在一個(gè)屏幕上開辟出一個(gè)區(qū)域以填充所有的組件,實(shí)現(xiàn)屏幕的擴(kuò)充,但是FrameLayout框架會將所有的組件都放在屏幕的左上角,而且所有的組件都是通過層疊的方式來進(jìn)行顯示,也就是說,它們都是從左上角處開始設(shè)置,然后一個(gè)覆蓋著一個(gè)的顯示。容器可以進(jìn)行嵌套布局,使得布局變得更加靈活,更加方便的顯示各個(gè)組件,使得布局更加合理,可以按照開發(fā)者的意愿進(jìn)行設(shè)計(jì)。安卓的控件常用的有TextView文本顯示組件主要用來顯示文本信息。Button按鈕組件主要用來實(shí)現(xiàn)點(diǎn)擊的功能。EditText編輯框組件主要用來輸入文本信息。RadioButton單選鈕組件主要用來實(shí)現(xiàn)單項(xiàng)選擇的功能。ImageView圖片視圖組件主要用來實(shí)現(xiàn)圖片顯示的功能。ImageButton圖片按鈕組件主要用來實(shí)現(xiàn)含有圖片的按鈕功能。3.2首頁界面設(shè)計(jì)和實(shí)現(xiàn)3.2.1首頁界面首頁界面的實(shí)現(xiàn)效果如圖3-1:圖3-1首界面3.2.2首頁布局設(shè)計(jì)該界面采用的是抽屜側(cè)滑的布局,通過查閱API來解決的,采用在Android擴(kuò)展的包中的組件DrawerLayout,是一個(gè)很好的側(cè)邊欄,支持手勢打開主界面。首頁上部分采用的是LinearLayout完成布局設(shè)置,嵌套RelativeLayout相對布局,下部分采用的是GridView網(wǎng)格視圖設(shè)置功能模塊的布局。<android.support.v4.widget.DrawerLayoutxmlns:android="/apk/res/android"xmlns:tools="/tools"android:id="@+id/drawerlayout"android:layout_width="match_parent"android:layout_height="match_parent">設(shè)置線性布局的高度和寬度為填滿,線性布局的排列方式設(shè)置為垂直排列。<LinearLayoutandroid:layout_width="match_parent"android:layout_height="match_parent"android:orientation="vertical">設(shè)置相對布局的寬度為填滿,高度為350dp,相對布局的背景設(shè)置為res文件夾中drawable中的圖片背景。<!--首頁布局上--><RelativeLayoutandroid:layout_width="match_parent"android:layout_height="350dp"android:background="@drawable/index_logo_bg">設(shè)置圖片的高度和寬度為根據(jù)內(nèi)容調(diào)整,對齊方式為水平居中,垂直居中,圖片設(shè)置為res文件夾中drawable中的圖片。 <ImageView android:id="@+id/imageview1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_centerHorizontal="true" android:layout_centerVertical="true" android:src="@drawable/index_logo"/>設(shè)置左上角的圖片的高度和寬度為根據(jù)內(nèi)容調(diào)整,與父控件的左對齊,設(shè)置距離父控件的上部10dp,圖片背景設(shè)置為res文件夾中drawable中的圖片。點(diǎn)擊左側(cè)的按鈕展開左側(cè)抽屜。 <ImageButton android:id="@+id/icon_opendrawer" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentLeft="true" android:layout_marginTop="10dp" android:background="@drawable/index_more_icon"/> 設(shè)置搜索框的高度和寬度為根據(jù)內(nèi)容調(diào)整,設(shè)置搜索框位于圖片下部,水平居中,背景為從res文件夾中drawable讀取中的圖片,文本屬性設(shè)置為可點(diǎn)擊效果,左邊設(shè)置搜索的圖標(biāo),圖片同樣來自drawable中,對齊方式設(shè)置為垂直對齊,文本的信息內(nèi)容設(shè)置為空時(shí)顯示的文字提示信息,輸入時(shí)提示信息自動消失,設(shè)置點(diǎn)擊操作的方法為search,點(diǎn)擊時(shí)調(diào)用search方法執(zhí)行操作。 <TextView android:id="@+id/main_search" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_below="@+id/imageview1" android:layout_centerHorizontal="true" android:background="@drawable/search_bg" android:clickable="true" android:drawableLeft="@drawable/search_icon" android:gravity="center_vertical" android:hint="搜索藥品名:如阿司匹林,輸入aspl" android:onClick="search"/>首頁下部的布局為網(wǎng)格布局,設(shè)置網(wǎng)格布局的高度和寬度為根據(jù)內(nèi)容調(diào)整,網(wǎng)格布局的顯示列數(shù)為兩列,設(shè)置縮放與列寬大小同步,垂直邊距和水平邊距均為1dp。<!--首頁布局下--><GridViewandroid:id="@+id/gridview"android:layout_width="wrap_content"android:layout_height="wrap_content"android:numColumns="2"android:stretchMode="columnWidth"android:verticalSpacing="1dp" android:horizontalSpacing="1dp"/>左邊的抽屜布局設(shè)置為框架布局,高度為填滿和,寬度為200dp,框架布局的對齊方式為左對齊,背景設(shè)置為白色。<!--左邊的抽屜--><FrameLayout android:id="@+id/left_drawer" android:layout_width="200dp" android:layout_height="match_parent" android:layout_gravity="left"android:background="#FFFFFF"></FrameLayout>3.3.3首頁功能實(shí)現(xiàn)(1)GridView效果實(shí)現(xiàn)采用集合接口ArrayList來動態(tài)添加數(shù)組,添加的主要有圖片和文本信息,再使用SimpleAdapter設(shè)置將圖片和文本信息添加到GridView中,首先要先設(shè)置GridView中每項(xiàng)的布局控制文件,在相對布局中設(shè)置ImageView和TextView組件來分別設(shè)置圖片和文本信息,最后將GridView中的每項(xiàng)設(shè)置監(jiān)聽事件setOnItemClickListener,實(shí)現(xiàn)點(diǎn)擊效果,進(jìn)入相應(yīng)的功能模塊。 ArrayList<HashMap<String,Object>>items=newArrayList<HashMap<String,Object>>(); for(inti=0;i<4;i++){ HashMap<String,Object>map=newHashMap<String,Object>(); map.put("itemImage",images[i]); map.put("itemText",titles[i]); items.add(map); } SimpleAdaptersaImageItems=newSimpleAdapter(this,items, R.layout.grid_item,newString[]{"itemImage","itemText"}, newint[]{R.id.image_item,R.id.text_item}); gridView.setAdapter(saImageItems); gridView.setOnItemClickListener(newOnItemClickListener(){});(2)左側(cè)抽屜效果實(shí)現(xiàn)抽屜打開效果首先找到布局中的ImageButton組件,為組件設(shè)置監(jiān)聽setOnClickListener,使用openDrawer方法實(shí)現(xiàn)打開左邊抽屜的效果。左邊的抽屜同樣要設(shè)置監(jiān)聽并重寫方法實(shí)現(xiàn)打開展示效果。 openButton.setOnClickListener(newOnClickListener(){ publicvoidonClick(Viewv){ drawerLayout.openDrawer(Gravity.LEFT);//從左邊拉出抽屜 } }); drawerLayout=(DrawerLayout)findViewById(R.id.drawerlayout); drawerLayout.setDrawerListener(newDrawerListener(){ publicvoidonDrawerStateChanged(intarg0){ //TODOAuto-generatedmethodstub } publicvoidonDrawerSlide(Viewarg0,floatarg1){ //TODOAuto-generatedmethodstub } publicvoidonDrawerOpened(Viewarg0){ //TODOAuto-generatedmethodstub } publicvoidonDrawerClosed(Viewarg0){ //TODOAuto-generatedmethodstub } });左側(cè)抽屜采用ListView列表顯示組件顯示,在FrameLayout中加入ListView組件,將顯示的文本信息設(shè)置,登錄,關(guān)于加入到ListView中,并對ListView設(shè)置監(jiān)聽setOnItemClickListener實(shí)現(xiàn)點(diǎn)擊進(jìn)入相應(yīng)列表項(xiàng)的效果。listView=newListView(this); listView.setAdapter(newArrayAdapter<String>(this, android.R.layout.simple_expandable_list_item_1,this.data)); ((FrameLayout)findViewById(R.id.left_drawer)).addView(listView); listView.setOnItemClickListener(newOnItemClickListener(){});(3)雙擊退出效果實(shí)現(xiàn)設(shè)置返回鍵的點(diǎn)擊效果,在主界面的時(shí)候,點(diǎn)擊一次提示“再按一次退出程序”,采用定時(shí)器Timer,用來在一個(gè)后臺線程計(jì)劃執(zhí)行指定任務(wù),它可以按計(jì)劃一次或反復(fù)多次執(zhí)行一個(gè)任務(wù)。Timer類執(zhí)行schedule模式,指定任務(wù)重復(fù)執(zhí)行的頻率。抽象類TimerTask是被Timer計(jì)劃的任務(wù)。這樣可以設(shè)置在2秒內(nèi)再次按下返回鍵則退出,否則不退出該程序。publicbooleanonKeyDown(intkeyCode,KeyEventevent){ if(keyCode==KeyEvent.KEYCODE_BACK){ Toast.makeText(MainActivity.this,"再按一次退出程序",Toast.LENGTH_SHORT) .show(); TimertExit=null; if(isExit==false){ isExit=true; tExit=newTimer(); tExit.schedule(newTimerTask(){ @Override publicvoidrun(){ isExit=false;//退出程序 } },2000);//如果2秒鐘內(nèi)沒有再按下返回鍵,則啟動定時(shí)器取消掉剛才執(zhí)行的任務(wù) }else{ finish(); System.exit(0); } } returnfalse; }4功能模塊的設(shè)計(jì)和具體實(shí)現(xiàn)4.1保健食品界面效果如圖4-1,圖4-2,圖4-3,圖4-4:圖4-1保健食品一級界面圖4-2保健食品二級界面圖4-3保健食品三級界面圖4-4保健食品四級界面界面布局設(shè)計(jì)與實(shí)現(xiàn):圖4-1,4-2,4-3采用布局復(fù)用,使用相同的布局:整體采用相對布局,相對布局中嵌套一個(gè)線性布局,上面的線性布局顯示界面頭部效果,下面布局顯示ListView。ListView設(shè)置高度和寬度為填滿,位置設(shè)置在頭部LinearLayout的下部,與界面的底部對齊。圖4-4的布局采用的是相對布局,相對布局中嵌套兩個(gè)線性布局,顯示藥品詳情的采用的是ScrollView滾動視圖。上面的線性布局文件加入ImageView組件設(shè)置刪除該頁面功能,圖片設(shè)置為點(diǎn)擊效果,在drawable中btn_delete布局文件選擇器設(shè)置未點(diǎn)擊和點(diǎn)擊兩種不同的效果。<ImageView android:id="@+id/disease_top_imageView" android:layout_width="wrap_content" android:layout_height="25dp" android:onClick="toDelete" android:src="@drawable/btn_delete"/><selectorxmlns:android="/apk/res/android"><itemandroid:drawable="@drawable/icon_bg_bottom"android:state_pressed="true"></item><itemandroid:drawable="@drawable/close_btn"></item></selector>(3)檢查網(wǎng)絡(luò)連接,需要在androidmanifest中設(shè)置用戶權(quán)限獲取網(wǎng)絡(luò)權(quán)限和獲取網(wǎng)絡(luò)狀態(tài),得到系統(tǒng)連接服務(wù)器的狀態(tài),返回獲得代表網(wǎng)絡(luò)連接狀態(tài)的對象,判斷如果沒有網(wǎng)絡(luò)則提示請檢查網(wǎng)絡(luò)。代碼如下:try{ ConnectivityManagermanager=(ConnectivityManager)context.getSystemService(Context.CONNECTIVITY_SERVICE);//獲取系統(tǒng)的連接服務(wù) NetworkInfoinfo=manager.getActiveNetworkInfo();//獲取代表聯(lián)網(wǎng)狀態(tài)的NetWorkInfo對象 return(info!=null&&info.isConnected()); }catch(Exceptione){ returnfalse; }if(!NetHelper.IsHaveInternet(getApplication())){ Toast.makeText(HealthFoodActivity.this,"請檢查網(wǎng)絡(luò)",Toast.LENGTH_SHORT).show(); }使用ProgressDialog提示網(wǎng)絡(luò)請求,當(dāng)進(jìn)行網(wǎng)絡(luò)請求時(shí)彈出進(jìn)度條對話框提示正在加載,請稍后,請求結(jié)束后進(jìn)度條對話框自動消失。(4)請求數(shù)據(jù),數(shù)據(jù)的請求可以分為同步請求以及異步請求,同步請求就是指主線程阻塞,在主線程中使用該請求方法會使應(yīng)用程序阻塞而不會做出任何用戶事件。因此,在應(yīng)用程序設(shè)計(jì)時(shí),大多都是會另開啟專門的子線程來響應(yīng)事件,或者用異步請求來代替來增加用戶的體驗(yàn)。異步請求會更加精準(zhǔn)控制事件。異步請求的優(yōu)點(diǎn)是不會阻塞當(dāng)前線程,但是相對于同步請求來講會相對比較復(fù)雜一些,至少要在程序中加入回調(diào)的方法來獲取異步事件響應(yīng)的數(shù)據(jù)。下面采用的是異步網(wǎng)絡(luò)請求。publicclassDrugsAsyncTaskextendsAsyncTask<String,Void,byte[]>{ @Override protectedbyte[]doInBackground(String...params){//每次的進(jìn)度處理、可以更新ui組件 Stringurl=params[0]; //從url中截取到body中的信息 bytedata[]=(url.substring(url.indexOf("?")+1)).getBytes();//?? json=HttpUtils.post(url,data,true);// try{ JSONObjectjsonObject=newJSONObject(getJsonData()); if(jsonObject!=null&&jsonObject.optBoolean("success")){ DataShareddataShared=newDataShared(context); if(!dataShared.contains(url)){ dataShared.beginEdit(); dataShared.persistent(url,getJsonData()); dataShared.endEdit(); } } }catch(JSONExceptione){ e.printStackTrace(); } returnjson; } @Override protectedvoidonPostExecute(byte[]result){//該方法將在執(zhí)行實(shí)際的后臺操作前被UI //thread調(diào)用,可以在該方法中做一些準(zhǔn)備工作 super.onPostExecute(result); if(cb!=null){ cb.onDataReturned(newString(result));//引用數(shù)據(jù)類型的強(qiáng)制轉(zhuǎn)換 } } publicstaticStringgetJsonData(){ returnnewString(json); } publicstaticvoidstartTask(Contextcontext,ICallbackcb,Stringurl){ drugsAsyncTask=newDrugsAsyncTask(cb,context);//引用傳遞 drugsAsyncTask.execute(url); }}(5)回調(diào),就是客戶程序CLIENT調(diào)用服務(wù)程序SERVER中的某個(gè)函數(shù)SA,然后SERVER又在某個(gè)時(shí)候反過來調(diào)用CLIENT中的某個(gè)函數(shù)CB,對于CLIENT來說,這個(gè)CB便叫做回調(diào)函數(shù)。一般說來,CLIENT不會自己調(diào)用CB,CLIENT提供CB的目的就是讓SERVER來調(diào)用它,而且是CLIENT不得不提供。由于SERVER并不知道CLIENT提供的CB叫甚名誰,所以SERVER會約定CB的接口規(guī)范(函數(shù)原型),然后由CLIENT提前通過SERVER的一個(gè)函數(shù)R告訴SERVER自己將要使用CB函數(shù),這個(gè)過程稱為回調(diào)函數(shù)的注冊,R稱為注冊函數(shù)。在異步請求工具類中聲明一個(gè)回調(diào)接口,并實(shí)例化這個(gè)回調(diào)接口,通過post請求方法請求數(shù)據(jù),在要更新的activity中實(shí)現(xiàn)回調(diào)接口的方法,獲取異步請求響應(yīng)的數(shù)據(jù),通知activity進(jìn)行數(shù)據(jù)更新。利用回調(diào)和異步可以實(shí)現(xiàn)網(wǎng)絡(luò)請求數(shù)據(jù)。publicinterfaceICallback{ /** *@paraminData是下載的json數(shù)據(jù) * */ publicvoidonDataReturned(StringinData); }(6)JSON數(shù)據(jù)解析:用戶請求回來的數(shù)據(jù)都是JSON字符串,JSON可以表示數(shù)組以及復(fù)雜的對象,并不僅僅是鍵和值的簡單列表。JSON可以將JavaScript對象中表示的一組數(shù)據(jù)轉(zhuǎn)換為字符串,然后可以在函數(shù)之間簡單的訪問這些字符串,或者可以通過Web客戶機(jī)將異步應(yīng)用程序中的字符傳遞給服務(wù)器端程序,用戶只有經(jīng)過解析之后才能夠使用。publicstaticHealthyFoodgetFoodData(StringJsonString){ HealthyFoodhFood=newHealthyFood(); List<HealthyFoodData>list2=newArrayList<HealthyFoodData>(); try{ JSONObjectroot=newJSONObject(JsonString); hFood.setCount(root.getInt("count")); hFood.setSuccess(root.getBoolean("success")); JSONArrayarray=root.getJSONArray("data"); for(inti=0;i<array.length();i++){ JSONObjectelementObject=array.getJSONObject(i); HealthyFoodDatafoodData=newHealthyFoodData(); foodData.setId(elementObject.getInt("id")); foodData.setName(elementObject.getString("name")); foodData.setOtherName(elementObject.getString("otherName")); foodData.setPosition(elementObject.getInt("position")); foodData.setRecommendCategory(elementObject .getString("recommendCategory")); list2.add(foodData); } hFood.setList(list2); }catch(JSONExceptione){ //TODOAuto-generatedcatchblock e.printStackTrace(); } returnhFood; }4.2對癥找藥(1)界面效果如圖4-5,圖4-6,圖4-7:圖4-5對癥找藥一級界面圖4-6對癥找藥二級界面圖4-7對癥找藥三級界面界面動畫效果的設(shè)計(jì)和實(shí)現(xiàn):圖4-5,4-6的布局設(shè)計(jì)與保健食品的設(shè)計(jì)相同,采用布局復(fù)用,圖4-7的布局設(shè)計(jì)用到了一個(gè)水平線性布局添加了疾病簡介,藥物治理,推薦藥物三個(gè)文本信息的TextView組件,設(shè)置文本的比重為1,即平均設(shè)置各個(gè)文本水平擺放,并設(shè)置為居中。畫面的動態(tài)滑動效果使用過了ViewPager動畫顯示組件,組件的背景取為#f6f5ec,比重分配為1,設(shè)置每個(gè)view顯示的時(shí)間長為20毫秒,定義繪圖的高速緩存的持久性。<android.support.v4.view.ViewPager android:id="@+id/vPager" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_below="@id/cursor" android:background="#f6f5ec" android:layout_gravity="center" android:layout_weight="1.0" android:flipInterval="20" android:persistentDrawingCache="animation"/>網(wǎng)絡(luò)請求數(shù)據(jù),解析數(shù)據(jù)等與保健食品功能模塊類似。將請求得到的數(shù)據(jù)在ViewPager動畫效果中展示,ViewPager每個(gè)頁卡通過適配器加載布局,設(shè)置默認(rèn)打開頁卡為0,ViewPager動畫效果的偏移量設(shè)置通過設(shè)置OnPageChangeListener監(jiān)聽器控制,動畫的移動設(shè)置x和y的偏移量,實(shí)現(xiàn)動畫的移動效果。具體代碼如下:PublicclassMyOnPageChangeListenerimplementsOnPageChangeListener{ intone=60*2; inttwo=one*2; publicvoidonPageSelected(intarg0){//此方法是頁面跳轉(zhuǎn)完后得到調(diào)用,arg0是你當(dāng)前選中的頁面的Position(位置編號) Animationanimation=null; switch(arg0){ case0: if(currIndex==1){ animation=newTranslateAnimation(one,0,0,0); }elseif(currIndex==2){ animation=newTranslateAnimation(two,0,0,0); } break; case1: if(currIndex==0){ animation=newTranslateAnimation(offset,one,0,0); }elseif(currIndex==2){ animation=newTranslateAnimation(two,one,0,0); } break; case2: if(currIndex==0){ animation=newTranslateAnimation(offset,two,0,0); }elseif(currIndex==1){ animation=newTranslateAnimation(one,two,0,0); } break; } currIndex=arg0; animation.setFillAfter(true);//True:圖片停在動畫結(jié)束位置 animation.setDuration(300);//動畫時(shí)間毫秒數(shù) cursor.startAnimation(animation); } publicvoidonPageScrolled(intarg0,floatarg1,intarg2){ } publicvoidonPageScrollStateChanged(intarg0){//此方法是在狀態(tài)改變的時(shí)候調(diào)用,其中arg0這個(gè)參數(shù)有三種狀態(tài)(0,1,2)。 //arg0==1的時(shí)辰默示正在滑動,arg0==2的時(shí)辰默示滑動完畢了,arg0==0的時(shí)辰默示什么都沒做 } }4.3家庭藥箱(1)界面效果如圖4-8,圖4-9,圖4-10:圖4-8家庭藥箱 圖4-9增加界面圖4-10刪除界面動態(tài)添加藥箱的設(shè)計(jì)和實(shí)現(xiàn)通過添加按鈕可以向數(shù)據(jù)庫中動態(tài)插入數(shù)據(jù),如果輸入相同的名字則去掉重復(fù)的名字,點(diǎn)擊編輯可以從數(shù)據(jù)庫中動態(tài)的刪除數(shù)據(jù)。數(shù)據(jù)的動態(tài)添加和刪除顯示在Fragment動態(tài)添加和刪除布局效果中。主界面的布局采用的是相對布局,上部和下部采用的也是相對布局設(shè)置界面,下部的線性布局中加入按鈕組件,實(shí)現(xiàn)點(diǎn)擊效果。中間嵌套垂直排列的LinearLayout來加入新增的個(gè)人藥箱。增加和刪除的頁面采用的是Fragment,F(xiàn)ragment不能獨(dú)立存在,它必須嵌入到activity中,F(xiàn)ragment是activity的界面中的一部分或一種行為??梢园讯鄠€(gè)Fragment組合到一個(gè)activity中來創(chuàng)建一個(gè)多界面并且可以在多個(gè)activity中重用一個(gè)Fragment。Fragment接收它自己的事件,并可以在activity運(yùn)行時(shí)被添加或刪除。數(shù)據(jù)的動態(tài)添加和刪除使用android的輕量級數(shù)據(jù)庫sqlite,Android提供了三種數(shù)據(jù)存儲方式,第一種是文件存儲;第二種是SharedPreferences存儲;第三種就是數(shù)據(jù)庫SQLiteDatabase存儲。文件存儲我就不用多說了,而SharedPreferences可以存取簡單的數(shù)據(jù)(int,double,float.etc),它經(jīng)常用于數(shù)據(jù)緩存,因?yàn)樗x取存儲簡單。在Android應(yīng)用程序中使用SQLite,必須自己創(chuàng)建數(shù)據(jù)庫,然后創(chuàng)建表、索引,填充數(shù)據(jù)。Android提供了SQLiteOpenHelper幫助創(chuàng)建一個(gè)數(shù)據(jù)庫,繼承SQLiteOpenHelper類,就可以輕松的創(chuàng)建數(shù)據(jù)庫。SQLiteOpenHelper類根據(jù)開發(fā)應(yīng)用程序的需要,封裝了創(chuàng)建和更新數(shù)據(jù)庫使用的邏輯。SQLiteOpenHelper的子類代碼如下:publicclassDBHelperextendsSQLiteOpenHelper{ privatestaticfinalStringDB_NAME="mydb.db"; privatestaticfinalintVERSION=1; publicDBHelper(Contextcontext){ super(context,DB_NAME,null,VERSION); //TODOAuto-generatedconstructorstub } /** *當(dāng)數(shù)據(jù)庫首次創(chuàng)建時(shí)執(zhí)行該方法,一般將創(chuàng)建表等初始化操作放在該方法中執(zhí)行. *重寫onCreate方法,調(diào)用execSQL方法創(chuàng)建表 **/ @Override publicvoidonCreate(SQLiteDatabasedb){ //TODOAuto-generatedmethodstub Stringsql="createtablemedicine(namevarchar(64)primarykey,sexvarchar(20),yunfuvarchar(20),agevarchar(20))"; db.execSQL(sql); } //當(dāng)打開數(shù)據(jù)庫時(shí)傳入的版本號與當(dāng)前的版本號不同時(shí)會調(diào)用該方法 @Override publicvoidonUpgrade(SQLiteDatabasedb,intoldVersion,intnewVersion){ //TODOAuto-generatedmethodstub }}(3)點(diǎn)擊新增功能,跳轉(zhuǎn)到新增功能頁面,在新增頁面中輸入信息,圖4-9的布局設(shè)計(jì)相對布局中嵌套兩個(gè)相對布局,中間的相對布局嵌套四個(gè)水平的線性布局,第一個(gè)線性布局中添加TextView稱呼文本顯示和EditText編輯框輸入姓名,并通過<requestFocus/>捕獲焦點(diǎn);第二個(gè)線性布局中添加TextView性別文本顯示和單選按鈕,單選鈕RadioButton必須放在RadioGroup中才能實(shí)現(xiàn)單選的效果,設(shè)置默認(rèn)的選擇狀態(tài)為男。第三個(gè)線性布局中添加TextView孕婦文本顯示,設(shè)置默認(rèn)的狀態(tài)為否,這一選項(xiàng)只有在選擇的性別是女時(shí)才會出現(xiàn)。第四個(gè)線性布局中設(shè)置年齡輸入情況。最后添加按鈕實(shí)現(xiàn)確定提交功能。<RadioGroup android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/radioGroupSex" android:orientation="horizontal" > <RadioButton android:id="@+id/radio0" android:layout_width="wrap_content" android:layout_height="wrap_content" android:checked="true" android:text="男" /> <RadioButton android:id="@+id/radio1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="女" /> </RadioGroup>選擇性別為女時(shí)自動顯示是否是孕婦的單選框,這一功能通過設(shè)置性別的選擇setOnCheckedChangeListener監(jiān)聽器,設(shè)置孕婦項(xiàng)是顯示還是隱藏。rg1.setOnCheckedChangeListener(newOnCheckedChangeListener(){ publicvoidonCheckedChanged(RadioGroupgroup,intcheckedId){ //TODOAuto-generatedmethodstub switch(checkedId){ caseR.id.radio0: layout.setVisibility(View.GONE); sex=true; break; caseR.id.radio1: layout.setVisibility(View.VISIBLE); sex=false; break; } }4.4搜索(1)界面效果如圖4-11圖4-11搜索界面(2)圖文混排效果設(shè)計(jì)和實(shí)現(xiàn)ListView圖文混排實(shí)現(xiàn),自定義適配器加入圖片和文字實(shí)現(xiàn)圖文混排,自定義的適配器要繼承BaseAdapte并重寫里面的方法,其中最重要的就是getview方法,將每項(xiàng)的布局加載,再將獲得的控件對象添加到viewhodler中,然后做標(biāo)記設(shè)置好組件屬性,最后將數(shù)據(jù)綁定到控件中,實(shí)現(xiàn)LiseView圖文混排,最后在主UI組件上添加適配器。classSearchAdapterextendsBaseAdapter{ privateList<SearchData>list; publicSearchAdapter(){ list=newArrayList<SearchData>(); } publicvoidadd(List<SearchData>list){ if(list!=null){ this.list=list; } } publicintgetCount(){ //TODOAuto-generatedmethodstub returnlist.size(); } publicObjectgetItem(intposition){ //TODOAuto-generatedmethodstub returnlist.get(position); } publiclonggetItemId(intposition){ //TODOAuto-generatedmethodstub returnposition; } publicViewgetView(intposition,ViewconvertView,ViewGroupparent){ //TODOAuto-generatedmethodstub ViewHolderholder=null; if(convertView==null){ holder=newViewHolder(); convertView=LayoutInflater.from(MainSearchActivity.this) .inflate(R.layout.search_item,null); holder.textView1=(TextView)convertView .findViewById(R.id.showName); holder.textView2=(TextView)convertView .findViewById(R.pany); convertView.setTag(holder); }else{ holder=(ViewHolder)convertView.getTag(); } holder.textView1.setText(list.get(position).getShowName()); holder.textView2.setText(list.get(position).getCompany()); returnconvertView; }5抽屜功能的設(shè)計(jì)和具體實(shí)現(xiàn)5.1設(shè)置界面效果如圖5-1圖5-1設(shè)置界面(2)清除緩存功能的實(shí)現(xiàn)清除緩存設(shè)置可以清除程序中的緩存,清除本應(yīng)用的內(nèi)部緩存,清除本應(yīng)用SharedPreference中的緩存。File[]files=SettingActivity.this.getCacheDir().listFiles(); for(Fileitem:files){ item.delete(); } DataClearManager.cleanFiles(getApplicationContext()); DataClearManager.cleanInternalCache(getApplicationContext()); DataClearManager.cleanSharedPreference(getApplicationContext());5.2登錄界面效果如圖5-2圖5-2登錄界面WebView加載網(wǎng)頁的設(shè)計(jì)和實(shí)現(xiàn)登錄界面使用WebView組件加載網(wǎng)頁,首先使用進(jìn)度條提示框提示加載頁面,頁面加載成功,顯示登錄界面可以通過登錄界面登錄網(wǎng)頁,可以查詢網(wǎng)頁上關(guān)于疾病和藥品的相關(guān)信息。webview.getSettings().setJavaScriptEnabled(true);webview.loadUrl("/account/register.do");WebView客戶端設(shè)置來處理點(diǎn)擊和請求事件,實(shí)現(xiàn)網(wǎng)頁的點(diǎn)擊。classMyWebViewClientextendsWebViewClient{//處理各種通知、請求事件的 @Override publicbooleanshouldOverrideUrlLoading(WebViewview,Stringurl){ view.loadUrl(url); returntrue;//返回true表明點(diǎn)擊網(wǎng)頁里面的鏈接還是在當(dāng)前的webview里跳轉(zhuǎn),不跳到瀏覽器那邊 } @Override publicvoidonPageFinished(WebViewview,Stringurl){//頁面加載結(jié)束時(shí)調(diào)用 stopProgressDlg(); } @Override publicvoidonReceivedError(WebViewview,interrorCode, Stringdescription,StringfailingUrl){ }5.3關(guān)于界面效果如圖5-3圖5-3關(guān)于界面采用引用布局實(shí)現(xiàn)布局復(fù)用整體采用相對布局,界面的上部分用的是引用布局,方便布局的復(fù)用可以將該布局應(yīng)用于多個(gè)相同布局情況的頁面布局中。引用布局的布局設(shè)計(jì)為整體為相對布局,相對布局中添加TextView組件,設(shè)置為可點(diǎn)擊的效果,調(diào)用goback方法返回。<includeandroid:id="@+id/top"android:layout_width="match_parent"android:layout_height="wrap_content"android:layout_alignParentTop="true"layout="@layout/topbar_about"/>引用布局不同的模塊設(shè)置不同的標(biāo)題,只需在程序中單獨(dú)設(shè)置即可。textView=(TextView)findViewById(R.id.publictxt);textView.setText("關(guān)于");6結(jié)束語在安卓移動應(yīng)用設(shè)計(jì)開發(fā)中,我能很好地結(jié)合用戶需求和目前技術(shù)的發(fā)展。大學(xué)四年學(xué)習(xí)的編程思想和編程技巧,在最后的畢業(yè)設(shè)計(jì)當(dāng)中得到了運(yùn)用。經(jīng)過此次畢業(yè)設(shè)計(jì),充分認(rèn)識到了自己編程能力方面的缺陷,感覺到自己的基礎(chǔ)比較薄弱。但在這段時(shí)間里,我不斷地發(fā)現(xiàn)自己的問題,并且找出問題產(chǎn)生的原因,根據(jù)相關(guān)的方法解決問題,雖然還有不少不足,我將不斷的完善它。我通過做這個(gè)畢業(yè)設(shè)計(jì),了解到做一個(gè)完整的系統(tǒng)之前,必須先對該系統(tǒng)進(jìn)行需求分析,擬好系統(tǒng)需要達(dá)到的功能和系統(tǒng)的所有需求,并且畫出系統(tǒng)的大體設(shè)計(jì)流程圖和框架。做完這些準(zhǔn)備工作,做系統(tǒng)的時(shí)候才會得心應(yīng)手。想到哪里就做到哪里,不僅效率不高,還會影響到系統(tǒng)的可用性。完成系統(tǒng)之后才發(fā)現(xiàn),對于軟件設(shè)計(jì),要想做到得心應(yīng)手,必須多多練習(xí)。只有寫夠足夠多的代碼,才能真正理解軟件設(shè)計(jì)的思想及運(yùn)用。當(dāng)然要做到這一步,要付出相當(dāng)多的努力,在沒有做到之前,遇到不懂的地方就要多參考資料,請教別人。7致謝將近幾個(gè)月的畢業(yè)設(shè)計(jì)基本結(jié)束了,這段時(shí)間的實(shí)踐和學(xué)習(xí)對我來說很有意義,借此,我要感謝所有關(guān)心、支持、幫助我的人。首先,要感謝孫晨霞老師,在畢業(yè)設(shè)計(jì)過程中,孫晨霞老師給予了我極大的支持和幫助。在老師的幫助下,我學(xué)到了很多東西。孫老師認(rèn)真的工作態(tài)度,嚴(yán)謹(jǐn)?shù)慕虒W(xué)精神和深厚的理論水平時(shí)刻都影響著我。在整個(gè)畢業(yè)設(shè)計(jì)的過程中,老師一直是認(rèn)真而耐心的給我講解,積極的幫我解決一些疑問,還會經(jīng)常給我一些建設(shè)性的意見。所以我的畢業(yè)設(shè)計(jì)能夠比較順利的完成與孫老師的幫助支持是分不開的。她無論在理論上還是實(shí)踐中都給予我很大的幫助,使我有了很大的提高。其次,要感謝我的同學(xué)們和實(shí)習(xí)的同事們。在畢業(yè)設(shè)計(jì)過程中,我們經(jīng)常交流、溝通、協(xié)商,一起解決一個(gè)又一個(gè)的問題,提高了我的溝通學(xué)習(xí)能力,同時(shí)也從他們的身上學(xué)到了很多解決問題的思想以及堅(jiān)忍不拔,認(rèn)真工作的精神。此外,感謝大學(xué)四年來所有傳授給我知識的老師,這四年中,他們無私地把自己所知道的東西,都想盡可能多的告訴我們,其中不僅僅是知識,還有一些為人處事的道理原則,他們希望未來的我們能夠?qū)崿F(xiàn)自己的價(jià)值,希望未來我們的道路能夠越走有寬廣。我要感謝所有關(guān)心幫助過我的人,他們的鼓勵(lì)支持就是我不斷奮斗努力的動力。最后,衷心地感謝所有一直關(guān)心、支持和幫助我的人,感謝我的學(xué)校。在大學(xué)四年中我成長了很多,收獲了很多,在以后的工作學(xué)習(xí)中,我會更加地努力回報(bào)學(xué)校和老師。8參考文獻(xiàn)[1]孫晨霞,楊興運(yùn)主編,java程序設(shè)計(jì),北京:中國計(jì)劃出版社,2007[2]朱婷婷,李惠,基于Android的應(yīng)用軟件的綜述[J],電腦與電信,2011(01)[3]孔萬里,李震,Java從入門到精通,北京:人民郵電出版社,2010[4]畢廣吉,Java程序設(shè)計(jì)實(shí)例教程[M],北京:冶金工業(yè)出版社,2007[5]李寧,Android開發(fā)權(quán)威指南[M],北京:人民郵電出版社,2011[6]吳亞峰,Android編程典型實(shí)例與項(xiàng)目開發(fā)[M],北京:電子工業(yè)出版社,2011[7]姚尚朗,靳巖,Google
Android開發(fā)入門與實(shí)踐[M],北京:人民郵電出版社,2009[8]郭宏志,Android應(yīng)用開發(fā)詳解[M],北京:電子工業(yè)出版社,2010[9](美)墨菲,Android開發(fā)入門教程[M],北京:人民郵電出版社,2010基于C8051F單片機(jī)直流電動機(jī)反饋控制系統(tǒng)的設(shè)計(jì)與研究基于單片機(jī)的嵌入式Web服務(wù)器的研究MOTOROLA單片機(jī)MC68HC(8)05PV8/A內(nèi)嵌EEPROM的工藝和制程方法及對良率的影響研究基于模糊控制的電阻釬焊單片機(jī)
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 廣安市2025年上半年四川廣安市鄰水縣“小平故里英才”引進(jìn)急需緊缺專業(yè)人才公筆試歷年參考題庫典型考點(diǎn)附帶答案詳解(3卷合一)
- 安徽省2025年蚌埠高新區(qū)天河社區(qū)行政事務(wù)管理中心招聘編外人員5人筆試歷年參考題庫典型考點(diǎn)附帶答案詳解(3卷合一)
- 寧夏2025年寧夏醫(yī)科大學(xué)公開招聘高層次人才60人筆試歷年參考題庫典型考點(diǎn)附帶答案詳解(3卷合一)
- 大連市2025遼寧大連工業(yè)大學(xué)赴北京體育大學(xué)東北師范大學(xué)北京師范大學(xué)招聘事業(yè)筆試歷年參考題庫典型考點(diǎn)附帶答案詳解(3卷合一)
- 廣東安全員考試及答案
- 放射證考試題目及答案
- 炊事班職業(yè)生涯規(guī)劃書
- 2025安徽阜陽職業(yè)技術(shù)學(xué)院博士后科研工作站博士后研究人員招聘2人備考筆試題庫及答案解析
- 2026年昌吉學(xué)院“銀齡教師”招募(54人)備考考試題庫及答案解析
- 砼結(jié)構(gòu)構(gòu)件項(xiàng)目技術(shù)方案
- 2025年綜合類-衛(wèi)生系統(tǒng)招聘考試-護(hù)士招聘考試歷年真題摘選帶答案(5卷套題【單選100題】)
- 如何制作低壓電纜頭
- 熱費(fèi)催繳管理辦法
- 廣東省建筑工程質(zhì)量檢測收費(fèi)項(xiàng)目及標(biāo)準(zhǔn)表01
- 學(xué)堂在線 科學(xué)研究方法與論文寫作 期末考試答案
- 統(tǒng)編版語文八年級下冊第12課《詩經(jīng)》二首練習(xí)題(含答案)
- 舞蹈機(jī)構(gòu)衛(wèi)生管理制度
- 錨桿支護(hù)安全教育試卷
- FSMS食品安全管理體系
- 新疆開放大學(xué)2025年春《國家安全教育》形考作業(yè)1-4終考作業(yè)答案
- 醫(yī)療器械供貨保障與應(yīng)急響應(yīng)措施
評論
0/150
提交評論