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