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