俞坤游,陳益民,駱德漢,梁耀普
(1.廣東工業(yè)大學 信息工程學院,廣東 廣州 510006;2.廣州能迪自動化設備有限公司,廣東 廣州 510000)
近年來,隨著信息技術的快速發(fā)展,國內(nèi)越來越多的醫(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)了護士查詢病情基本信息,病情記錄、健康評測等功能。
Android系統(tǒng)架構一共包含4層,分別是應用程序層、應用框架層、系統(tǒng)運行庫和Linux內(nèi)核層[2-3]。通常所說的應用就是在最上層(即應用層)進行開發(fā)的。Android的應用程序開發(fā)需要用到許多工具,包括編譯器、調(diào)試器、模擬器等。因此,搭建一個良好的開發(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的安裝路徑。
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所示。
圖1 技術路線圖
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類的對象,調(diào)用transport.call(action,envelope)傳送數(shù)據(jù),其中 action為 WSDL中所要調(diào)用的接口函數(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)化,而且提高了傳輸速率,減少了傳輸時間。
根據(jù)護士的需求和軟件的特點,系統(tǒng)的功能設計如圖2所示。
圖2 系統(tǒng)功能結構
本系統(tǒng)開發(fā)使用了 SQLite[7]數(shù)據(jù)庫,Android系統(tǒng)本身集成了SQLite,提供了一些新的 API來使用 SQLite數(shù)據(jù)庫,通過使用這些API便可實現(xiàn)數(shù)據(jù)庫操作。
本模塊先調(diào)用WifiManager服務,檢查平板電腦,確定打開WiFi,再通過WebService傳入賬號和密碼進入主界面。同時,需要在AndroidMainfest.xml文件中設置獲取WiFi權限和聯(lián)網(wǎng)權限。
登錄成功之后,系統(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 獲取病人信息流程圖
當選擇一個病人之后,系統(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類字符串。
選擇病情記錄后,就會跳轉到病情記錄界面,需要開啟另外一個線程從服務器獲取信息。系統(tǒng)會在這時將病人證號numid通過WebService傳遞到服務器,獲取SoapObject,根據(jù)病情記錄相關類用getProperty解析SoapObject。病情記錄頁面上包含病情檢查記錄、實時病情記錄記錄以及醫(yī)囑記錄。這些信息都將在網(wǎng)絡獲取之后,存放在本地SQLite數(shù)據(jù)庫,每獲取一次就會覆蓋上次SQLite數(shù)據(jù)中相應信息,只保留一個副本。護士將實時檢查的信息存儲到實時病情記錄中,通過WebService接口,將所需要提交的數(shù)據(jù)用addProperty方法發(fā)送至服務器。傳遞的信息同樣是自定義類,因此必須使用Json類將其轉化成字符串。
該模塊主要是通過病人配合護士做一系列題目,然后計算出得分來評估病人的健康狀態(tài)。單擊健康評測,系統(tǒng)會列出歷史評測記錄。評測系統(tǒng)會先通過get-SharedPreferences[12]調(diào)用 SharedPreferences對象,寫入選中病人證件號numid的鍵值對。SharePreference是Android系統(tǒng)輕量級存儲器,可以用來保存和共享值或者參數(shù)。評測完成后,系統(tǒng)會將病人證號numid、評測項目名稱及分數(shù),通過WebService提交到服務器。同樣病人的評測成績也是自定義類,因此也需要Json化轉化成字符串。
在Eclipse開發(fā)環(huán)境中,由遠程服務器端模擬完成用于測試的相關病人信息,平板的系統(tǒng)為Android4.0,測試結果如圖4所示。通過病人基本信息界面,可以查看相修改關信息,并將之保存到服務器。圖5是病情記錄界面,可以查看相關歷史病情記錄信息。除了上述界面之外,還有健康評測、評測試卷等界面。
通過使用第三方類庫將WebService技術與Android應用程序開發(fā)相結合,實現(xiàn)了Android客戶端與遠程服務器之間的通信連接,同時可應用于護士查房系統(tǒng)。該系統(tǒng)具有一定的實用性,為醫(yī)療鄰域的發(fā)展提供了一個良好的方案。
圖4 基本信息界面
圖5 病情記錄界面
[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.