文獻(xiàn)標(biāo)識(shí)碼: A
文章編號(hào): 0258-7998(2013)10-0127-03
近年來(lái),,隨著信息技術(shù)的快速發(fā)展,,國(guó)內(nèi)越來(lái)越多的醫(yī)院加速實(shí)施基于網(wǎng)絡(luò)化平臺(tái)、HIS系統(tǒng)的整體建設(shè),,以提高服務(wù)水平和核心競(jìng)爭(zhēng)力,。眾所周知,查房是醫(yī)生護(hù)士每天例行的工作,,傳統(tǒng)模式下,,護(hù)士、醫(yī)生們通常要帶上一大堆的病例本,,并以手寫(xiě)方式記錄病人的實(shí)時(shí)病情等信息,。這樣既不利于提高查房效率,,也容易因錄入和識(shí)別而產(chǎn)生誤差[1],。
隨著Android系統(tǒng)的日益普及,。基于Android平臺(tái)開(kāi)發(fā)的各種技術(shù)應(yīng)用也越來(lái)越廣泛,。本文描述了基于WebService技術(shù)Android平臺(tái)的查房系統(tǒng)的設(shè)計(jì)與開(kāi)發(fā),,模擬器上實(shí)現(xiàn)了護(hù)士查詢(xún)病情基本信息,病情記錄,、健康評(píng)測(cè)等功能,。
1 Android系統(tǒng)架構(gòu)和開(kāi)發(fā)環(huán)境
Android系統(tǒng)架構(gòu)一共包含4層,分別是應(yīng)用程序?qū)?、?yīng)用框架層,、系統(tǒng)運(yùn)行庫(kù)和Linux內(nèi)核層[2-3]。通常所說(shuō)的應(yīng)用就是在最上層(即應(yīng)用層)進(jìn)行開(kāi)發(fā)的,。Android的應(yīng)用程序開(kāi)發(fā)需要用到許多工具,,包括編譯器、調(diào)試器,、模擬器等,。因此,搭建一個(gè)良好的開(kāi)發(fā)環(huán)境是進(jìn)行系統(tǒng)開(kāi)發(fā)的前提,。首先,需要下載Android SDK,、Java JDK、Eclipse,、Eclipse ADT插件,。其次安裝JDK并配置好JDK的環(huán)境變量;然后安裝Android SDK和Eclipse ADT插件,,打開(kāi)SDK Manager下載所需要的Android系統(tǒng)平臺(tái)文件,;最后配置Eclipse下的Android SDK和JDK的安裝路徑。
2 技術(shù)基礎(chǔ)
2.1 WebService技術(shù)描述
WebService的設(shè)計(jì)思想是充分利用Web分布式編程模型的松散耦合性,,允許各種平臺(tái),、各種編程語(yǔ)言的應(yīng)用,實(shí)現(xiàn)數(shù)據(jù)交換,,并無(wú)縫地整合在一起,。即WebService可以用來(lái)消除不同平臺(tái)、不同語(yǔ)言之間的差異,,將現(xiàn)有的應(yīng)用程序發(fā)布成開(kāi)放式服務(wù),,從而允許互聯(lián)網(wǎng)上任何地方、任何平臺(tái),、任何語(yǔ)言的應(yīng)用程序訪(fǎng)問(wèn)該服務(wù)[4],。
WebService主要體現(xiàn)在的如下幾個(gè)標(biāo)準(zhǔn)和協(xié)議為:
(1) 可擴(kuò)展標(biāo)記語(yǔ)言(XML),,WebService采用XML進(jìn)行數(shù)據(jù)傳輸,并建立在XML之上,。
(2) 即簡(jiǎn)單對(duì)象訪(fǎng)問(wèn)協(xié)議(SOAP),,主要是用于分布式的環(huán)境中交換信息的協(xié)議。SOAP采用XML消息格式,,可以使用不同的操作系統(tǒng),、不同的語(yǔ)言之間進(jìn)行通信。WebService就是使用SOAP作為它的標(biāo)準(zhǔn)通信協(xié)議[5],。
(3) WebService描述語(yǔ)言(WSDL),,也是基于XML格式描述的,定義了該WebService的位置,、功能及如何通信等,。根據(jù)WebService技術(shù)的特點(diǎn), 實(shí)現(xiàn)路線(xiàn)圖如圖1所示。
2.2 基于Android的WebService技術(shù)
Android系統(tǒng)的應(yīng)用層采用Java語(yǔ)言編寫(xiě),,其中包括了Java的很多功能,。但是由于Android系統(tǒng)沒(méi)有相應(yīng)的WebService庫(kù)文件,因此在Android平臺(tái)上需要使用第三方軟件包ksoap2-android-assembly-2.6.5-jar-with-dependencies.jar,。該軟件包是一個(gè)開(kāi)源項(xiàng)目,,為Android平臺(tái)提供了一個(gè)輕量級(jí)而高效的SOAP庫(kù)[6]。
使用ksoap2-android開(kāi)發(fā)應(yīng)用的步驟大致如下:
(1)首先客戶(hù)端和服務(wù)器之間要商量好所要連接的地址和接口,。根據(jù)服務(wù)器端生成WSDL文檔,,找出命名空間和接口函數(shù)以及所需要傳入的參數(shù)。SoapObject object=new SoapObject(nameSpace,method)根據(jù)接口函數(shù)傳入相關(guān)參數(shù)object.addProperty(“param”,value),其中param是參數(shù)類(lèi)型,,value是參數(shù)值,。
(2) 使用SoapEnvelope.VER11對(duì)Soap協(xié)議版本初始化描述,確定發(fā)送對(duì)象 envelope.bodyout=object,。
(3) 實(shí)例化HttpTransportSE類(lèi)的對(duì)象,,調(diào)用transport.call(action, envelope)傳送數(shù)據(jù),其中action為WSDL中所要調(diào)用的接口函數(shù)soapaction,。
(4) 使用SoapObject result=(SoapObject)envelope.getResponse( )獲取返回的結(jié)果,。
實(shí)現(xiàn)WebService數(shù)據(jù)在網(wǎng)絡(luò)中傳輸所需的數(shù)據(jù)量較大,因此,,需要將自定義類(lèi)轉(zhuǎn)換成Json格式的字符串String,,然后再由服務(wù)器端添加一個(gè)第三方Json解析包,解析客戶(hù)端傳遞的Json轉(zhuǎn)換string的類(lèi)型參數(shù),,這樣不僅使數(shù)據(jù)量得到優(yōu)化,,而且提高了傳輸速率,減少了傳輸時(shí)間,。
3 系統(tǒng)功能設(shè)計(jì)
根據(jù)護(hù)士的需求和軟件的特點(diǎn),,系統(tǒng)的功能設(shè)計(jì)如圖2所示,。
本系統(tǒng)開(kāi)發(fā)使用了SQLite[7]數(shù)據(jù)庫(kù),Android系統(tǒng)本身集成了SQLite,,提供了一些新的API來(lái)使用SQLite數(shù)據(jù)庫(kù),,通過(guò)使用這些API便可實(shí)現(xiàn)數(shù)據(jù)庫(kù)操作。
3.1登錄模塊
本模塊先調(diào)用WifiManager服務(wù),,檢查平板電腦,,確定打開(kāi)WiFi,,再通過(guò)WebService傳入賬號(hào)和密碼進(jìn)入主界面,。同時(shí),需要在AndroidMainfest.xml文件中設(shè)置獲取WiFi權(quán)限和聯(lián)網(wǎng)權(quán)限,。
3.2 病人列表信息模塊
登錄成功之后,系統(tǒng)會(huì)讓主線(xiàn)程中通過(guò)new Thread()開(kāi)啟一個(gè)線(xiàn)程,通過(guò)WebService加載病人列表,,并通過(guò)SoapObject函數(shù)getProperty來(lái)解析數(shù)據(jù)包,詳細(xì)解析需查看SoapObject的API說(shuō)明,,解析后的數(shù)據(jù)以與服務(wù)器約定好的自定義類(lèi)的形式存放在本地?cái)?shù)據(jù)庫(kù)SQLite[8-10],。
由于Android系統(tǒng)的主線(xiàn)程(UI線(xiàn)程)是安全的,線(xiàn)程與線(xiàn)程之間的通信可使用或繼承Hander類(lèi)的對(duì)象,通過(guò)發(fā)送Message互相通信,。當(dāng)系統(tǒng)主線(xiàn)程收到Message時(shí),,主線(xiàn)程開(kāi)始加載顯示從本地?cái)?shù)據(jù)庫(kù)讀取的病人信息,并進(jìn)行按照字母排序,、位置排序以及搜素病人的操作,。這三部分操作都是通過(guò)對(duì)SQLite數(shù)據(jù)庫(kù)的數(shù)據(jù)進(jìn)行排序、搜索操作的,。通過(guò)使用和設(shè)置ListView控件及其適配器,,將要顯示的數(shù)據(jù)以視圖的方式映射在ListView列表上,從而實(shí)現(xiàn)了數(shù)據(jù)與ListView的綁定,。其流程如圖3所示,。
3.3 基本信息模塊
當(dāng)選擇一個(gè)病人之后,系統(tǒng)會(huì)通過(guò)WebService[11]提供的接口傳遞參數(shù)numid(病人證件號(hào))到服務(wù)器,以獲取該病人的信息,默認(rèn)顯示對(duì)應(yīng)病人的基本信息表,。如果網(wǎng)絡(luò)沒(méi)有連接上,該頁(yè)面會(huì)以Toast通知的形式出現(xiàn)提示,,同時(shí)讀取本地的數(shù)據(jù)庫(kù)SQLite加載、顯示之前下載的相對(duì)應(yīng)的病人信息,。如果連接成功,,獲取到的這些信息存在SoapObject對(duì)象中,通過(guò)getProperty解析獲取該類(lèi)每一個(gè)屬性,,同時(shí),,再把該病人的信息寫(xiě)入本地?cái)?shù)據(jù)庫(kù)SQLite以覆蓋原來(lái)的數(shù)據(jù),然后再將信息設(shè)置到Layout布局文件中,,最后用Fragment類(lèi)將信息顯示出來(lái),。Fragment[11]是Android3.0以上系統(tǒng)才有的特性,,是為了解決不同屏幕分辯率的動(dòng)態(tài)的UI設(shè)計(jì)。為此,,需要在Activity中通過(guò)getFragmentManager()獲取FragmentManager對(duì)象,,通過(guò)FragmentManager類(lèi)方法來(lái)更新UI。如果需要對(duì)修改后的病人信息進(jìn)行保存,,系統(tǒng)會(huì)通過(guò)WebService相應(yīng)接口函數(shù),將病人信息用SoapObject對(duì)象的addProperty(“param”,value)方法以參數(shù)的形式提交到服務(wù)器端保存,。同時(shí),由于病人信息是服務(wù)器和客戶(hù)端約定好的自定義類(lèi),,傳遞自定義類(lèi)對(duì)象時(shí),,需要自定義類(lèi)使用Json轉(zhuǎn)化成String類(lèi)字符串。
3.4 病情記錄模塊
選擇病情記錄后,就會(huì)跳轉(zhuǎn)到病情記錄界面,,需要開(kāi)啟另外一個(gè)線(xiàn)程從服務(wù)器獲取信息,。系統(tǒng)會(huì)在這時(shí)將病人證號(hào)numid通過(guò)WebService傳遞到服務(wù)器,獲取SoapObject,,根據(jù)病情記錄相關(guān)類(lèi)用getProperty解析SoapObject,。病情記錄頁(yè)面上包含病情檢查記錄、實(shí)時(shí)病情記錄記錄以及醫(yī)囑記錄,。這些信息都將在網(wǎng)絡(luò)獲取之后,,存放在本地SQLite數(shù)據(jù)庫(kù),每獲取一次就會(huì)覆蓋上次SQLite數(shù)據(jù)中相應(yīng)信息,,只保留一個(gè)副本,。護(hù)士將實(shí)時(shí)檢查的信息存儲(chǔ)到實(shí)時(shí)病情記錄中,通過(guò)WebService 接口,,將所需要提交的數(shù)據(jù)用addProperty方法發(fā)送至服務(wù)器,。傳遞的信息同樣是自定義類(lèi),因此必須使用Json類(lèi)將其轉(zhuǎn)化成字符串,。
3.5 健康評(píng)測(cè)記錄模塊
該模塊主要是通過(guò)病人配合護(hù)士做一系列題目,,然后計(jì)算出得分來(lái)評(píng)估病人的健康狀態(tài)。單擊健康評(píng)測(cè),,系統(tǒng)會(huì)列出歷史評(píng)測(cè)記錄,。評(píng)測(cè)系統(tǒng)會(huì)先通過(guò)getSharedPreferences[12]調(diào)用SharedPreferences對(duì)象,寫(xiě)入選中病人證件號(hào)numid的鍵值對(duì),。SharePreference是Android系統(tǒng)輕量級(jí)存儲(chǔ)器,,可以用來(lái)保存和共享值或者參數(shù)。評(píng)測(cè)完成后,,系統(tǒng)會(huì)將病人證號(hào)numid,、評(píng)測(cè)項(xiàng)目名稱(chēng)及分?jǐn)?shù),通過(guò)WebService提交到服務(wù)器。同樣病人的評(píng)測(cè)成績(jī)也是自定義類(lèi),因此也需要Json化轉(zhuǎn)化成字符串,。
4 測(cè)試結(jié)果
在Eclipse開(kāi)發(fā)環(huán)境中,由遠(yuǎn)程服務(wù)器端模擬完成用于測(cè)試的相關(guān)病人信息,,平板的系統(tǒng)為Android4.0,測(cè)試結(jié)果如圖4所示,。通過(guò)病人基本信息界面,,可以查看相修改關(guān)信息,并將之保存到服務(wù)器,。圖5是病情記錄界面,,可以查看相關(guān)歷史病情記錄信息。除了上述界面之外,,還有健康評(píng)測(cè),、評(píng)測(cè)試卷等界面。
通過(guò)使用第三方類(lèi)庫(kù)將WebService技術(shù)與Android應(yīng)用程序開(kāi)發(fā)相結(jié)合,實(shí)現(xiàn)了Android客戶(hù)端與遠(yuǎn)程服務(wù)器之間的通信連接,,同時(shí)可應(yīng)用于護(hù)士查房系統(tǒng),。該系統(tǒng)具有一定的實(shí)用性,為醫(yī)療鄰域的發(fā)展提供了一個(gè)良好的方案,。
參考文獻(xiàn)
[1] 高山.無(wú)線(xiàn)移動(dòng)查房解決方案[J].中國(guó)數(shù)字醫(yī)學(xué),,2007,2(3):53-55.
[2] 楊豐盛. Android應(yīng)用開(kāi)發(fā)揭秘[M].北京:機(jī)械工業(yè)出版社,2010.
[3] 倪紅軍,錢(qián)昌俊.基于Android平臺(tái)的自發(fā)短信系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)[J].電子技術(shù)應(yīng)用,2012,38(12):126-129.
[4] 李剛.瘋狂Android講義[M].北京:電子工業(yè)出版社,,2010.
[5] 肖維民,韋津華.基于WebService的車(chē)險(xiǎn)移動(dòng)勘察系統(tǒng)[J]. 計(jì)算機(jī)應(yīng)用與軟件,,2012(6):239-241.
[6] 閔現(xiàn)暢,黃理燦. 基于Android平臺(tái)的Web服務(wù)技術(shù)研究[J].工業(yè)控制計(jì)算機(jī),2011,24(4):92-94.
[7] 劉安站,賈曉輝.基于Android的私密短信系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)[J]. 微型機(jī)與應(yīng)用,2012,31(17):51-52.
[8] Android Developers.[EB/OL].[2013-08-07].http://developer.android.com/guide/components/index.html.
[9] 佘志龍,陳昱勛,,鄭名杰,等.Android SDK開(kāi)發(fā)范例大全[M].北京:人民郵電出版社,,2011.
[10] 王家林.大話(huà)企業(yè)級(jí)Android開(kāi)發(fā)[M].北京:電子工業(yè)出版社,2011.
[11] 戈改珍,解爭(zhēng)龍,,張琨.基于Android的火車(chē)時(shí)刻表查詢(xún)系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)[J].現(xiàn)代電子技術(shù),,2012,35(4):41-44.
[12] 郭宏志.Android應(yīng)用開(kāi)發(fā)詳解[M].北京:電子工業(yè)出版社,2010.