基于安卓平臺開發(fā)的移動應用——用藥指南【畢業(yè)論文】_第1頁
已閱讀1頁,還剩32頁未讀 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、<p><b>  本科畢業(yè)論文</b></p><p><b>  (20 屆)</b></p><p>  基于安卓平臺開發(fā)的移動應用——用藥指南</p><p><b>  摘要</b></p><p>  在日常的生活中,疾病是我們每個人不可避免會發(fā)生的一件

2、事。由于藥物具有兩重性,一方面可以治療疾病,另一方面也可能產生不良反應,因此安全、合理用藥是非常重要的。本應用是基于安卓平臺開發(fā)的,以java語言為基礎,從合理、安全用藥的實際情況出發(fā),在了解用戶需求的基礎上,提出了為用戶提供用藥指南的基本目標,并且實現(xiàn)了根據(jù)病癥找藥和相關藥物的使用說明以及病癥特征的具體介紹,幫助用戶提供用藥指導,使用戶能夠更合理、安全的用藥。本文首先對Android的研究意義,技術簡介以及開發(fā)環(huán)境進行介紹,然后就應用

3、的需求進行一定的分析,設計出應用的流程和實現(xiàn)模塊,最后運用Android技術實現(xiàn)應用的開發(fā),給出應用的效果圖,具體介紹了應用的各個功能模塊的設計特點和具體的實現(xiàn)方法。通過程序的設計,了解到程序中設計的不足,最后做出總結。</p><p>  關鍵字:界面布局,ListView圖文混排,異步網絡請求數(shù)據(jù),數(shù)據(jù)解析,數(shù)據(jù)庫設計</p><p><b>  Abstract</b

4、></p><p>  In daily life, disease is unavoidable each of us one of the things will happen. Because the drug has duality, on the one hand, can cure diseases, on the other hand can also cause adverse reacti

5、ons, so it is very important to safe and rational drug use. This application is based on the android platform development, on the basis of the Java language, starting from the actual situation of reasonable, safe drug us

6、e, on the basis of the understanding of user needs, put forward to provide the basic pu</p><p>  Key words: interface layout, ListView by mixed, asynchronous network request data, data analysis, database des

7、ign</p><p><b>  目錄</b></p><p><b>  1 引言1</b></p><p>  1.1 課題研究意義1</p><p>  1.2 技術簡介1</p><p>  1.3 國內外研究情況2</p><p

8、>  1.4 開發(fā)工具安裝2</p><p>  2 需求分析和總體設計4</p><p>  2.1 需求分析4</p><p>  2.2 功能模塊設計5</p><p>  2.3 總體框架設計和實現(xiàn)方法5</p><p>  3 首頁設計和具體實現(xiàn)6</p><p>

9、;  3.1安卓的基本控件和容器的介紹6</p><p>  3.2 首頁界面設計和實現(xiàn)6</p><p>  3.2.1首頁界面6</p><p>  3.2.2首頁布局設計7</p><p>  3.3.3首頁功能實現(xiàn)8</p><p>  4 功能模塊的設計和具體實現(xiàn)11</p><

10、;p>  4.1 保健食品11</p><p>  4.2 對癥找藥15</p><p>  4.3 家庭藥箱17</p><p><b>  4.4 搜索20</b></p><p>  5 抽屜功能的設計和具體實現(xiàn)22</p><p><b>  5.1 設置22&

11、lt;/b></p><p><b>  5.2 登錄23</b></p><p><b>  5.3 關于24</b></p><p><b>  6 結束語25</b></p><p><b>  7 致謝26</b></p&g

12、t;<p>  8 參考文獻27</p><p><b>  1 引言</b></p><p>  1.1 課題研究意義</p><p>  隨著計算機的發(fā)展和智能手機的普及,由于安卓操作系統(tǒng)的可操作性強,使安卓迅速的成為現(xiàn)在主流的操作系統(tǒng),安卓移動應用也越來越受到人們的喜愛。Android是由Google推出的一款開放的

13、嵌入式操作系統(tǒng)平臺,Android聚集了來自世界各地的開發(fā)者,越來越多的創(chuàng)意和思想被應用到Android應用程序的開發(fā)中,它在國內具有相當強勁的競爭優(yōu)勢,Android移動開發(fā)平臺十分適合我國國內的開發(fā)環(huán)境。伴隨著Google Android操作系統(tǒng)的發(fā)展,以及移動網絡的迅猛發(fā)展,基于Android應用的移動開發(fā)備受關注。因此在了解AndroidSDK的基礎上,我開發(fā)了一款適應于Android操作系統(tǒng)的移動應用。</p>

14、<p>  本文從Android移動開發(fā)基礎出發(fā),在了解用戶需求的基礎上,設計出了完全適合Android操作系統(tǒng)的移動應用,并且詳細闡述了Android的sqlite輕量級數(shù)據(jù)庫存儲技術以及各個界面的布局設計過程和網絡請求數(shù)據(jù)等。</p><p><b>  1.2 技術簡介</b></p><p>  安卓是由Google公司推出的基于Linux平臺的開

15、源手機系統(tǒng),由操作系統(tǒng)、中間件、用于界面和應用軟件組成主要適用于便攜設備。</p><p>  Android的分層結構:應用程序、應用程序框架、系統(tǒng)運行庫層、Linux內核。如圖1-1</p><p>  圖1-1Android分層結構圖</p><p>  Android的優(yōu)點就是開源,便于開發(fā)人員更清楚的把握實現(xiàn)細節(jié),提高開發(fā)人員的技術水平,在軟件開發(fā)中限制相

16、對比較少,使用戶可以用到許多免費的軟件。</p><p>  在Android中,開發(fā)者可以使用Java作為編程語言來開發(fā)應用也可以通過C/C++等作為編程語言來開發(fā)應用程序。在Java開發(fā)方面Android支持使用Java作為編程語言來開發(fā)應用程序,Android的java開發(fā)從接口到功能,都有很多的變化,由于java虛擬機本身的效率和資源占用,google重新設計了Android的java,以便能提高效率和減

17、少資源的占用。</p><p>  Android本身是一個權限分立的操作系統(tǒng),在這個操作系統(tǒng)中,每個應用都以唯一的一個系統(tǒng)識別身份運行。系統(tǒng)的更多的安全功能通過權限機制提供。權限可以限制某個特定的進程的特定操作,也可以限制每個URI權限對特定的數(shù)據(jù)段的訪問。Android的安全架構的核心設計思想是,在默認的設置下,所有的應用都沒有權限對其他的應用、用戶等進行較大的影響的操作。</p><p&

18、gt;  總而言之,Android是一款開放式的操作系統(tǒng),并且提供了強大的SDK庫和開放的理念,隨著Android的快速發(fā)展,越來越多的編程者用各種語言開發(fā)Android應用程序,受到了眾多開發(fā)者的歡迎成為真正意義上的開放式的操作系統(tǒng)。沒有開發(fā)經驗的開發(fā)者可以不斷學習提高開發(fā)的能力,經驗豐富的開發(fā)者可以方便的擴展到Android移動平臺上來,利用Android的獨特功能開發(fā)新穎的移動應用。</p><p>  1

19、.3 國內外研究情況</p><p>  近年來,隨著科技的迅速發(fā)展以及移動互聯(lián)網的寬帶進一步擴展,智能手機的使用也越來越廣泛。在眾多智能手機操作系統(tǒng)中,谷歌的移動平臺Android操作系統(tǒng)因它開源的優(yōu)勢成為手機市場最受歡迎的智能操作系統(tǒng)平臺。Android的各種應用程序在市場中都有比較好的發(fā)展趨勢,尤其以手機移動應用更是受到人們的廣泛關注與喜愛。因為手機移動應用的便攜性和實用性,使得Android手機擁有著龐

20、大的用戶人群,體現(xiàn)了Android手機應用的巨大的發(fā)展?jié)摿?。Android系統(tǒng)自推出以來,就以明顯的優(yōu)勢逐漸擴大占有的市場份額,尤其在國外,android系統(tǒng)處于蓬勃發(fā)展的階段。在國內Android系統(tǒng)的應用已不僅局限于手機產業(yè),而是已經擴張到相關領域,例如平板電腦、車載系統(tǒng)、電視STB、智能電器、智能會議系統(tǒng)等。課題以研究如何在Android手機平臺上開發(fā)手機應用,研究學習了安卓的關鍵技術和具體的開發(fā)環(huán)境,該應用能夠比較完整的實現(xiàn)其功

21、能,方便人們查詢疾病和藥品,為人們的安全用藥和合理用藥提供了便利。</p><p>  1.4 開發(fā)工具安裝</p><p>  為了在PC主機上得到Android的開發(fā)環(huán)境,我們選擇在Windows操作系統(tǒng)中進行對Android開發(fā)環(huán)境的搭建,具體步驟如下:</p><p><b> ?。?)JDK安裝</b></p><

22、;p>  首先下載JDK,按照提示安裝成功后,最重要的是進行環(huán)境變量的配置,步驟如下:我的電腦->屬性->高級->環(huán)境變量->系統(tǒng)變量中添加以下環(huán)境變量:</p><p>  Java_HOME值為:C:\Program Files\Java\jdk1.6.0_20(安裝JDK的目錄)</p><p>  CLASSPATH值為:.;%Java_HOME%lib\tools.jar;

23、%Java_HOME%\lib\dt. jar;%Java _HOME%\bin;</p><p>  Path值:添加C:\Program Files\Java\jdk1.6.0_20\bin;</p><p> ?。?)Eclipse安裝可下載一個綠色版的Eclipse,無需安裝,和安裝版一樣都能為Android開發(fā)提供功能。</p><p> ?。?)Andr

24、oid SDK安裝在Android Developers下載Android-sdk_r07-windows.zip,下載完成后解壓到任意路徑。</p><p>  運行SDK Manager.exe,點擊Available Package。選擇希望安裝的SDK及其文檔或者其它包,點擊Installation Selected、Accept All、Install Accepted,開始下載安裝所選包。</p

25、><p>  下載完成后出現(xiàn)所有Android-sdk_r07-windows文件夾內容;</p><p><b> ?。?)ADT安裝</b></p><p>  ADT實際上是一個工具,它可以連接sdk和Eclipse,幫助Eclipse找到sdk打開Eclipse界面,進入進入菜單中的“Help”-> “Install New Softwar

26、e”,點擊Add按鈕彈出對話框要求輸入Name和Location,完成之后,選擇Window >Preferences;在左邊的面板選擇Android,然后在右側點擊Browse;并選中SDK路徑,本機為;D:\YJSH\Android\Android-sdk_r07-windows;點擊Apply、OK。配置完成。</p><p><b> ?。?)創(chuàng)建AVD</b></p>

27、<p>  為使Android應用程序可以在模擬器上運行,必須創(chuàng)建AVD,步驟如下:</p><p>  在Eclipse中,選擇Windows > Android SDK and AVD Manager,點擊左側面板的Virtual Devices,再右側點擊New,填入Name,選擇Target的API,SD Card大小任意,Skin隨便選,Hardware目前保持默認值,點擊Creat

28、eAVD即可完成創(chuàng)建AVD。</p><p>  2 需求分析和總體設計</p><p><b>  2.1 需求分析</b></p><p>  結合日常用藥的實際情況,根據(jù)用戶的需求,分析出主要實現(xiàn)以下幾個功能: </p><p><b>  A) 對癥找藥</b></p>&l

29、t;p>  1. 通過病癥查找病癥的具體介紹,方便人們及時發(fā)現(xiàn)疾病,預防疾病并通過病癥的介紹找到治療該疾病的藥物。</p><p>  2. 可以查尋到關于疾病的治療方法,方便人們根據(jù)自己的身體狀況找到積極治療疾病的方法。</p><p><b>  B) 保健食品</b></p><p>  1. 根據(jù)用戶的需求提供如改善睡眠等要求來查

30、找合適的保健品,根據(jù)保健品的種類找到合適的藥物。</p><p>  2. 找到合適的藥物查詢到藥物的具體介紹食用方法、注意事項等。方便人們了解藥物的特性不僅給生活中用藥提供了方便還提高人們的健康意識和對藥物、保健的了解。</p><p><b>  C) 家庭藥箱</b></p><p>  1. 家庭藥箱可以動態(tài)添加個人的藥箱,使用戶可以找

31、到自己的藥箱。</p><p>  2. 當藥箱不需要是時,可以動態(tài)的刪除個人藥箱。</p><p><b>  D) 搜索</b></p><p>  根據(jù)要查找的藥品,用戶輸入藥品的首字母即可以查詢出藥品的名字和藥品的生產公司。</p><p><b>  E) 設置</b></p>

32、<p>  設置中可以設置清除緩存來清除應用中的緩存。</p><p><b>  F) 登錄</b></p><p>  通過登錄功能可以登錄到官方網站查詢關于疾病和藥物的相關信息等了解疾病和做到合理、安全的用藥。</p><p><b>  G) 關于</b></p><p>  

33、簡要介紹關于應用的信息和相關的功能。</p><p>  2.2 功能模塊設計</p><p>  系統(tǒng)中的主要功能模塊及其結構關系如圖2-1:</p><p><b>  圖2-1功能模塊圖</b></p><p>  2.3 總體框架設計和實現(xiàn)方法</p><p>  本設計按照所要實現(xiàn)的功能

34、和總體的設計分為以下的模塊如圖2-2:</p><p><b>  圖2-2功能設計圖</b></p><p>  3 首頁設計和具體實現(xiàn)</p><p>  3.1安卓的基本控件和容器的介紹</p><p> ?。?)安卓的容器常用的有LinearLayout線性布局,主要有兩種類型,水平的線性布局和垂直的線性布局。水

35、平的線性布局就是LinearLayout中的控件按照水平的方式排列;垂直的線性布局就是LinearLayout中的控件按照垂直的方式排列。</p><p>  RelativeLayout相對布局,相對布局是一個控件的位置決定于它和其他控件的關系,相對布局的好處就是比較靈活,控件的位置擺放不像線性布局那樣單一,可以任意擺放控件的位置,但是缺點是掌握比較復雜,控件的位置設置比較繁瑣。</p><

36、p>  FrameLayout 框架布局,又叫幀布局,就是在一個屏幕上開辟出一個區(qū)域以填充所有的組件,實現(xiàn)屏幕的擴充,但是FrameLayout框架會將所有的組件都放在屏幕的左上角,而且所有的組件都是通過層疊的方式來進行顯示,也就是說,它們都是從左上角處開始設置,然后一個覆蓋著一個的顯示。</p><p>  容器可以進行嵌套布局,使得布局變得更加靈活,更加方便的顯示各個組件,使得布局更加合理,可以按照開發(fā)

37、者的意愿進行設計。</p><p>  安卓的控件常用的有TextView文本顯示組件主要用來顯示文本信息。Button按鈕組件主要用來實現(xiàn)點擊的功能。EditText編輯框組件主要用來輸入文本信息。RadioButton單選鈕組件主要用來實現(xiàn)單項選擇的功能。ImageView圖片視圖組件主要用來實現(xiàn)圖片顯示的功能。ImageButton圖片按鈕組件主要用來實現(xiàn)含有圖片的按鈕功能。</p><

38、p>  3.2 首頁界面設計和實現(xiàn)</p><p><b>  3.2.1首頁界面</b></p><p>  首頁界面的實現(xiàn)效果如圖3-1:</p><p><b>  圖3-1首界面</b></p><p>  3.2.2首頁布局設計</p><p>  該界面采用

39、的是抽屜側滑的布局,通過查閱API來解決的,采用在Android擴展的包中的組件DrawerLayout,是一個很好的側邊欄,支持手勢打開主界面。首頁上部分采用的是LinearLayout完成布局設置,嵌套RelativeLayout相對布局,下部分采用的是GridView網格視圖設置功能模塊的布局。</p><p>  <android.support.v4.widget.DrawerLayout <

40、;/p><p>  xmlns:android="http://schemas.android.com/apk/res/android"</p><p>  xmlns:tools="http://schemas.android.com/tools"</p><p>  android:id="@+id/drawerla

41、yout"</p><p>  android:layout_width="match_parent"</p><p>  android:layout_height="match_parent" ></p><p>  設置線性布局的高度和寬度為填滿,線性布局的排列方式設置為垂直排列。</p>

42、<p>  <LinearLayout</p><p>  android:layout_width="match_parent"</p><p>  android:layout_height="match_parent"</p><p>  android:orientation="vertica

43、l"></p><p>  設置相對布局的寬度為填滿,高度為350dp,相對布局的背景設置為res文件夾中drawable中的圖片背景。</p><p>  <!-- 首頁布局上 --></p><p>  <RelativeLayout </p><p>  android:layout_width=&qu

44、ot;match_parent"</p><p>  android:layout_height="350dp"</p><p>  android:background="@drawable/index_logo_bg"></p><p>  設置圖片的高度和寬度為根據(jù)內容調整,對齊方式為水平居中,垂直居中,

45、圖片設置為res文件夾中drawable中的圖片。</p><p>  <ImageView</p><p>  android:id="@+id/imageview1"</p><p>  android:layout_width="wrap_content"</p><p>  android

46、:layout_height="wrap_content"</p><p>  android:layout_centerHorizontal="true"</p><p>  android:layout_centerVertical="true"</p><p>  android:src="

47、@drawable/index_logo"/></p><p>  設置左上角的圖片的高度和寬度為根據(jù)內容調整,與父控件的左對齊,設置距離父控件的上部10dp,圖片背景設置為res文件夾中drawable中的圖片。點擊左側的按鈕展開左側抽屜。</p><p>  <ImageButton</p><p>  android:id="@

48、+id/icon_opendrawer"</p><p>  android:layout_width="wrap_content"</p><p>  android:layout_height="wrap_content"</p><p>  android:layout_alignParentLeft=&quo

49、t;true"</p><p>  android:layout_marginTop="10dp"</p><p>  android:background="@drawable/index_more_icon"/></p><p>  設置搜索框的高度和寬度為根據(jù)內容調整,設置搜索框位于圖片下部,水平居中,

50、背景為從res文件夾中drawable讀取中的圖片,文本屬性設置為可點擊效果,左邊設置搜索的圖標,圖片同樣來自drawable中,對齊方式設置為垂直對齊,文本的信息內容設置為空時顯示的文字提示信息,輸入時提示信息自動消失,設置點擊操作的方法為search,點擊時調用search方法執(zhí)行操作。</p><p>  <TextView </p><p>  android:id=&quo

51、t;@+id/main_search"</p><p>  android:layout_width="wrap_content"</p><p>  android:layout_height="wrap_content"</p><p>  android:layout_below="@+id/imag

52、eview1"</p><p>  android:layout_centerHorizontal="true"</p><p>  android:background="@drawable/search_bg"</p><p>  android:clickable="true"</p&

53、gt;<p>  android:drawableLeft="@drawable/search_icon"</p><p>  android:gravity="center_vertical"</p><p>  android:hint="搜索藥品名:如阿司匹林,輸入aspl"</p><p&

54、gt;  android:onClick="search"/></p><p>  首頁下部的布局為網格布局,設置網格布局的高度和寬度為根據(jù)內容調整,網格布局的顯示列數(shù)為兩列,設置縮放與列寬大小同步,垂直邊距和水平邊距均為1dp。</p><p>  <!-- 首頁布局下 --></p><p>  <GridView &

55、lt;/p><p>  android:id="@+id/gridview"</p><p>  android:layout_width="wrap_content"</p><p>  android:layout_height="wrap_content"</p><p>  an

56、droid:numColumns="2"</p><p>  android:stretchMode="columnWidth"</p><p>  android:verticalSpacing="1dp"</p><p>  android:horizontalSpacing="1dp&quo

57、t;</p><p><b>  /></b></p><p>  左邊的抽屜布局設置為框架布局,高度為填滿和,寬度為200dp,框架布局的對齊方式為左對齊,背景設置為白色。</p><p>  <!-- 左邊的抽屜 --></p><p>  <FrameLayout </p>&

58、lt;p>  android:id="@+id/left_drawer"</p><p>  android:layout_width="200dp"</p><p>  android:layout_height="match_parent"</p><p>  android:layout_gra

59、vity="left"</p><p>  android:background="#FFFFFF"></p><p>  </FrameLayout></p><p>  3.3.3首頁功能實現(xiàn)</p><p>  (1)GridView效果實現(xiàn)</p><p&g

60、t;  采用集合接口ArrayList來動態(tài)添加數(shù)組,添加的主要有圖片和文本信息,再使用SimpleAdapter設置將圖片和文本信息添加到GridView中,首先要先設置GridView中每項的布局控制文件,在相對布局中設置ImageView和TextView組件來分別設置圖片和文本信息,最后將GridView中的每項設置監(jiān)聽事件setOnItemClickListener,實現(xiàn)點擊效果,進入相應的功能模塊。</p>&

61、lt;p>  ArrayList<HashMap<String, Object>> items = new ArrayList<HashMap<String, Object>>();</p><p>  for (int i = 0; i < 4; i++) {</p><p>  HashMap<String, Objec

62、t> map = new HashMap<String, Object>();</p><p>  map.put("itemImage", images[i]);</p><p>  map.put("itemText", titles[i]);</p><p>  items.add(map);</

63、p><p><b>  }</b></p><p>  SimpleAdapter saImageItems = new SimpleAdapter(this, items,</p><p>  R.layout.grid_item, new String[] { "itemImage", "itemText"

64、; },</p><p>  new int[] { R.id.image_item, R.id.text_item });</p><p>  gridView.setAdapter(saImageItems);</p><p>  gridView.setOnItemClickListener(new OnItemClickListener() {});<

65、/p><p> ?。?)左側抽屜效果實現(xiàn)</p><p>  抽屜打開效果首先找到布局中的ImageButton組件,為組件設置監(jiān)聽setOnClickListener,使用openDrawer方法實現(xiàn)打開左邊抽屜的效果。左邊的抽屜同樣要設置監(jiān)聽并重寫方法實現(xiàn)打開展示效果。</p><p>  openButton.setOnClickListener(new OnCl

66、ickListener() {</p><p>  public void onClick(View v) {</p><p>  drawerLayout.openDrawer(Gravity.LEFT);// 從左邊拉出抽屜</p><p><b>  }</b></p><p><b>  });<

67、/b></p><p>  drawerLayout = (DrawerLayout) findViewById(R.id.drawerlayout);</p><p>  drawerLayout.setDrawerListener(new DrawerListener() {</p><p>  public void onDrawerStateChang

68、ed(int arg0) {</p><p>  // TODO Auto-generated method stub</p><p><b>  }</b></p><p>  public void onDrawerSlide(View arg0, float arg1) {</p><p>  // TODO Au

69、to-generated method stub</p><p><b>  }</b></p><p>  public void onDrawerOpened(View arg0) {</p><p>  // TODO Auto-generated method stub</p><p><b>  }&

70、lt;/b></p><p>  public void onDrawerClosed(View arg0) {</p><p>  // TODO Auto-generated method stub</p><p><b>  }</b></p><p><b>  });</b><

71、/p><p>  左側抽屜采用ListView列表顯示組件顯示,在FrameLayout中加入ListView組件,將顯示的文本信息設置,登錄,關于加入到ListView中,并對ListView設置監(jiān)聽setOnItemClickListener實現(xiàn)點擊進入相應列表項的效果。</p><p>  listView = new ListView(this);</p><p&g

72、t;  listView.setAdapter(new ArrayAdapter<String>(this,</p><p>  android.R.layout.simple_expandable_list_item_1, this.data));</p><p>  ((FrameLayout) findViewById(R.id.left_drawer)).addView

73、(listView);</p><p>  listView.setOnItemClickListener(new OnItemClickListener() {});</p><p> ?。?)雙擊退出效果實現(xiàn)</p><p>  設置返回鍵的點擊效果,在主界面的時候,點擊一次提示“再按一次退出程序”,采用定時器Timer,用來在一個后臺線程計劃執(zhí)行指定任務,它可

74、以按計劃一次或反復多次執(zhí)行一個任務。Timer類執(zhí)行schedule模式,指定任務重復執(zhí)行的頻率。抽象類TimerTask是被Timer計劃的任務。這樣可以設置在2秒內再次按下返回鍵則退出,否則不退出該程序。</p><p>  public boolean onKeyDown(int keyCode, KeyEvent event) {</p><p>  if (keyCode ==

75、KeyEvent.KEYCODE_BACK) {</p><p>  Toast.makeText(MainActivity.this, "再按一次退出程序", Toast.LENGTH_SHORT)</p><p><b>  .show();</b></p><p>  Timer tExit = null;</p

76、><p>  if (isExit == false) {</p><p>  isExit = true;</p><p>  tExit = new Timer();</p><p>  tExit.schedule(new TimerTask() {</p><p><b>  @Override</

77、b></p><p>  public void run() {</p><p>  isExit = false;// 退出程序</p><p><b>  }</b></p><p>  }, 2000);// 如果2秒鐘內沒有再按下返回鍵,則啟動定時器取消掉剛才執(zhí)行的任務</p><p&g

78、t;<b>  } else {</b></p><p><b>  finish();</b></p><p>  System.exit(0);</p><p><b>  }</b></p><p><b>  }</b></p>&l

79、t;p>  return false;</p><p><b>  }</b></p><p>  4 功能模塊的設計和具體實現(xiàn)</p><p><b>  4.1 保健食品</b></p><p>  界面效果如圖4-1,圖4-2,圖4-3,圖4-4:</p><p>

80、;  圖4-1保健食品一級界面 圖4-2保健食品二級界面</p><p>  圖4-3保健食品三級界面 圖4-4保健食品四級界面</p><p>  界面布局設計與實現(xiàn):</p><p>  圖4-1,4-2,4-3采用布局復用,使用相同的布局:</p><p>  整體采用相對布局,相對布

81、局中嵌套一個線性布局,上面的線性布局顯示界面頭部效果,下面布局顯示ListView。ListView設置高度和寬度為填滿,位置設置在頭部LinearLayout的下部,與界面的底部對齊。</p><p>  圖4-4的布局采用的是相對布局,相對布局中嵌套兩個線性布局,顯示藥品詳情的采用的是ScrollView滾動視圖。上面的線性布局文件加入ImageView組件設置刪除該頁面功能,圖片設置為點擊效果,在drawa

82、ble中btn_delete布局文件選擇器設置未點擊和點擊兩種不同的效果。</p><p>  <ImageView</p><p>  android:id="@+id/disease_top_imageView"</p><p>  android:layout_width="wrap_content"</p&

83、gt;<p>  android:layout_height="25dp"</p><p>  android:onClick="toDelete"</p><p>  android:src="@drawable/btn_delete" /></p><p>  <selecto

84、r xmlns:android="http://schemas.android.com/apk/res/android"></p><p>  <item android:drawable="@drawable/icon_bg_bottom" android:state_pressed="true"></item></

85、p><p>  <item android:drawable="@drawable/close_btn"></item></p><p>  </selector></p><p> ?。?)檢查網絡連接,需要在androidmanifest中設置用戶權限獲取網絡權限和獲取網絡狀態(tài),得到系統(tǒng)連接服務器的狀態(tài),返回獲

86、得代表網絡連接狀態(tài)的對象,判斷如果沒有網絡則提示請檢查網絡。代碼如下:</p><p><b>  try {</b></p><p>  ConnectivityManager manager = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);// 獲取系統(tǒng)的

87、連接服務</p><p>  NetworkInfo info = manager.getActiveNetworkInfo();// 獲取代表聯(lián)網狀態(tài)的NetWorkInfo對象</p><p>  return (info != null && info.isConnected());</p><p>  } catch (Exception e

88、) {</p><p>  return false;</p><p><b>  }</b></p><p>  if (!NetHelper.IsHaveInternet(getApplication())) {</p><p>  Toast.makeText(HealthFoodActivity.this, &q

89、uot;請檢查網絡", Toast.LENGTH_SHORT).show();</p><p><b>  }</b></p><p>  使用ProgressDialog提示網絡請求,當進行網絡請求時彈出進度條對話框提示正在加載,請稍后,請求結束后進度條對話框自動消失。</p><p> ?。?)請求數(shù)據(jù),數(shù)據(jù)的請求可以分為同步請求

90、以及異步請求,同步請求就是指主線程阻塞,在主線程中使用該請求方法會使應用程序阻塞而不會做出任何用戶事件。因此,在應用程序設計時,大多都是會另開啟專門的子線程來響應事件,或者用異步請求來代替來增加用戶的體驗。異步請求會更加精準控制事件。異步請求的優(yōu)點是不會阻塞當前線程,但是相對于同步請求來講會相對比較復雜一些,至少要在程序中加入回調的方法來獲取異步事件響應的數(shù)據(jù)。下面采用的是異步網絡請求。</p><p>  pu

91、blic class DrugsAsyncTask extends AsyncTask<String, Void, byte[]> {</p><p><b>  @Override</b></p><p>  protected byte[] doInBackground(String... params) {// 每次的進度處理、可以更新ui組件<

92、;/p><p>  String url = params[0];</p><p>  // 從url中 截取到body中的信息</p><p>  byte data[] = (url.substring(url.indexOf("?") + 1)).getBytes();// ??</p><p>  json = Htt

93、pUtils.post(url, data, true);//</p><p><b>  try {</b></p><p>  JSONObject jsonObject = new JSONObject(getJsonData());</p><p>  if (jsonObject != null && jsonObje

94、ct.optBoolean("success")) {</p><p>  DataShared dataShared = new DataShared(context);</p><p>  if (!dataShared.contains(url)) {</p><p>  dataShared.beginEdit();</p>

95、<p>  dataShared.persistent(url, getJsonData());</p><p>  dataShared.endEdit();</p><p><b>  }</b></p><p><b>  }</b></p><p>  } catch (JSON

96、Exception e) {</p><p>  e.printStackTrace();</p><p><b>  }</b></p><p>  return json;</p><p><b>  }</b></p><p><b>  @Override&

97、lt;/b></p><p>  protected void onPostExecute(byte[] result) {// 該方法將在執(zhí)行實際的后臺操作前被UI</p><p>  // thread調用,可以在該方法中做一些準備工作</p><p>  super.onPostExecute(result);</p><p> 

98、 if (cb != null) {</p><p>  cb.onDataReturned(new String(result));// 引用數(shù)據(jù)類型的強制轉換</p><p><b>  }</b></p><p><b>  }</b></p><p>  public static Stri

99、ng getJsonData() {</p><p>  return new String(json);</p><p><b>  }</b></p><p>  public static void startTask(Context context, ICallback cb, String url) {</p><

100、p>  drugsAsyncTask = new DrugsAsyncTask(cb, context);// 引用傳遞</p><p>  drugsAsyncTask.execute(url);</p><p><b>  }</b></p><p><b>  }</b></p><p>

101、; ?。?)回調,就是客戶程序CLIENT調用服務程序SERVER中的某個函數(shù)SA,然后SERVER又在某個時候反過來調用CLIENT中的某個函數(shù)CB,對于CLIENT來說,這個CB便叫做回調函數(shù)。一般說來,CLIENT不會自己調用CB,CLIENT提供CB的目的就是讓SERVER來調用它,而且是CLIENT不得不提供。由于SERVER并不知道CLIENT提供的CB叫甚名誰,所以SERVER會約定CB的接口規(guī)范(函數(shù)原型),然后由CLI

102、ENT提前通過SERVER的一個函數(shù)R告訴SERVER自己將要使用CB函數(shù),這個過程稱為回調函數(shù)的注冊,R稱為注冊函數(shù)。在異步請求工具類中聲明一個回調接口,并實例化這個回調接口,通過post請求方法請求數(shù)據(jù),在要更新的activity中實現(xiàn)回調接口的方法,獲取異步請求響應的數(shù)據(jù),通知activity進行數(shù)據(jù)更新。利用回調和異步可以實現(xiàn)網絡請求數(shù)據(jù)。</p><p>  public interface ICall

103、back {</p><p><b>  /**</b></p><p>  * @param inData是下載的json數(shù)據(jù)</p><p><b>  * </b></p><p><b>  */</b></p><p>  public voi

104、d onDataReturned(String inData);</p><p><b>  }</b></p><p> ?。?)JSON數(shù)據(jù)解析:用戶請求回來的數(shù)據(jù)都是JSON字符串,JSON可以表示數(shù)組以及復雜的對象,并不僅僅是鍵和值的簡單列表。JSON可以將JavaScript對象中表示的一組數(shù)據(jù)轉換為字符串,然后可以在函數(shù)之間簡單的訪問這些字符串,或者可以通

105、過Web客戶機將異步應用程序中的字符傳遞給服務器端程序,用戶只有經過解析之后才能夠使用。</p><p>  public static HealthyFood getFoodData(String JsonString) {</p><p>  HealthyFood hFood = new HealthyFood();</p><p>  List<Hea

106、lthyFoodData> list2 = new ArrayList<HealthyFoodData>();</p><p><b>  try {</b></p><p>  JSONObject root = new JSONObject(JsonString);</p><p>  hFood.setCount(roo

107、t.getInt("count"));</p><p>  hFood.setSuccess(root.getBoolean("success"));</p><p>  JSONArray array = root.getJSONArray("data");</p><p>  for (int i =

108、0; i < array.length(); i++) {</p><p>  JSONObject elementObject = array.getJSONObject(i);</p><p>  HealthyFoodData foodData = new HealthyFoodData();</p><p>  foodData.setId(eleme

109、ntObject.getInt("id"));</p><p>  foodData.setName(elementObject.getString("name"));</p><p>  foodData.setOtherName(elementObject.getString("otherName"));foodDat

110、a.setPosition(elementObject.getInt("position"));</p><p>  foodData.setRecommendCategory(elementObject</p><p>  .getString("recommendCategory"));</p><p>  list2.a

111、dd(foodData);</p><p><b>  }</b></p><p>  hFood.setList(list2);</p><p>  } catch (JSONException e) {</p><p>  // TODO Auto-generated catch block</p>&

112、lt;p>  e.printStackTrace();</p><p><b>  }</b></p><p>  return hFood;</p><p><b>  }</b></p><p><b>  4.2 對癥找藥</b></p><p&

113、gt;  (1)界面效果如圖4-5,圖4-6,圖4-7:</p><p>  圖4-5對癥找藥一級界面 圖4-6對癥找藥二級界面</p><p>  圖4-7對癥找藥三級界面</p><p>  界面動畫效果的設計和實現(xiàn):</p><p>  圖4-5,4-6的布局設計與保健食品的設計相同,采用布局復用,圖4-7的布局設

114、計用到了一個水平線性布局添加了疾病簡介,藥物治理,推薦藥物三個文本信息的TextView組件,設置文本的比重為1,即平均設置各個文本水平擺放,并設置為居中。畫面的動態(tài)滑動效果使用過了ViewPager動畫顯示組件,組件的背景取為#f6f5ec,比重分配為1,設置每個view顯示的時間長為20毫秒,定義繪圖的高速緩存的持久性。</p><p>  <android.support.v4.view.ViewPa

115、ger</p><p>  android:id="@+id/vPager"</p><p>  android:layout_width="wrap_content"</p><p>  android:layout_height="wrap_content"</p><p>  

116、android:layout_below="@id/cursor"</p><p>  android:background="#f6f5ec"</p><p>  android:layout_gravity="center"</p><p>  android:layout_weight="1

117、.0"</p><p>  android:flipInterval="20"</p><p>  android:persistentDrawingCache="animation" /></p><p>  網絡請求數(shù)據(jù),解析數(shù)據(jù)等與保健食品功能模塊類似。將請求得到的數(shù)據(jù)在ViewPager動畫效果中展示,

118、ViewPager每個頁卡通過適配器加載布局,設置默認打開頁卡為0,ViewPager動畫效果的偏移量設置通過設置OnPageChangeListener 監(jiān)聽器控制,動畫的移動設置x和y的偏移量,實現(xiàn)動畫的移動效果。具體代碼如下:</p><p>  Public class MyOnPageChangeListener implements OnPageChangeListener {</p>

119、<p>  int one = 60 * 2;</p><p>  int two = one * 2;</p><p>  public void onPageSelected(int arg0) {// 此方法是頁面跳轉完后得到調用,arg0是你當前選中的頁面的Position(位置編號)</p><p>  Animation animation =

120、 null;</p><p>  switch (arg0) {</p><p><b>  case 0:</b></p><p>  if (currIndex == 1) {</p><p>  animation = new TranslateAnimation(one, 0, 0, 0);</p>

121、<p>  } else if (currIndex == 2) {</p><p>  animation = new TranslateAnimation(two, 0, 0, 0);</p><p><b>  }</b></p><p><b>  break;</b></p><p

122、><b>  case 1:</b></p><p>  if (currIndex == 0) {</p><p>  animation = new TranslateAnimation(offset, one, 0, 0);</p><p>  } else if (currIndex == 2) {</p><

溫馨提示

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

評論

0/150

提交評論