俞坤游,陈益民,骆德汉,梁耀普
(1.广东工业大学 信息工程学院,广东 广州 510006;2.广州能迪自动化设备有限公司,广东 广州 510000)
近年来,随着信息技术的快速发展,国内越来越多的医院加速实施基于网络化平台、HIS系统的整体建设,以提高服务水平和核心竞争力。众所周知,查房是医生护士每天例行的工作,传统模式下,护士、医生们通常要带上一大堆的病例本,并以手写方式记录病人的实时病情等信息。这样既不利于提高查房效率,也容易因录入和识别而产生误差[1]。
随着Android系统的日益普及。基于Android平台开发的各种技术应用也越来越广泛。本文描述了基于WebService技术Android平台的查房系统的设计与开发,模拟器上实现了护士查询病情基本信息,病情记录、健康评测等功能。
Android系统架构一共包含4层,分别是应用程序层、应用框架层、系统运行库和Linux内核层[2-3]。通常所说的应用就是在最上层(即应用层)进行开发的。Android的应用程序开发需要用到许多工具,包括编译器、调试器、模拟器等。因此,搭建一个良好的开发环境是进行系统开发的前提。首先,需要下载 Android SDK、Java JDK、Eclipse、Eclipse ADT插件。其次安装JDK并配置好 JDK的环境变量;然后安装Android SDK和Eclipse ADT插件,打开SDK Manager下载所需要的Android系统平台文件;最后配置Eclipse下的Android SDK和JDK的安装路径。
WebService的设计思想是充分利用Web分布式编程模型的松散耦合性,允许各种平台、各种编程语言的应用,实现数据交换,并无缝地整合在一起。即WebService可以用来消除不同平台、不同语言之间的差异,将现有的应用程序发布成开放式服务,从而允许互联网上任何地方、任何平台、任何语言的应用程序访问该服务[4]。
WebService主要体现在的如下几个标准和协议为:
(1)可扩展标记语言(XML),WebService采用XML进行数据传输,并建立在XML之上。
(2)即简单对象访问协议(SOAP),主要是用于分布式的环境中交换信息的协议。SOAP采用XML消息格式,可以使用不同的操作系统、不同的语言之间进行通信。WebService就是使用SOAP作为它的标准通信协议[5]。
(3)WebService描述语言(WSDL),也是基于 XML格式描述的,定义了该WebService的位置、功能及如何通信等。根据WebService技术的特点,实现路线图如图1所示。
图1 技术路线图
Android系统的应用层采用Java语言编写,其中包括了Java的很多功能。但是由于Android系统没有相应的WebService库文件,因此在Android平台上需要使用第三方软件包ksoap2-android-assembly-2.6.5-jar-with-dependencies.jar。该软件包是一个开源项目,为Android平台提供了一个轻量级而高效的SOAP库[6]。
使用ksoap2-android开发应用的步骤大致如下:
(1)首先客户端和服务器之间要商量好所要连接的地址和接口。根据服务器端生成WSDL文档,找出命名空间和接口函数以及所需要传入的参数。SoapObject object=new SoapObject(nameSpace,method)根据接口函数传入相关参数 object.addProperty(“param”,value),其中 param是参数类型,value是参数值。
(2)使用SoapEnvelope.VER11对Soap协议版本初始化描述,确定发送对象 envelope.bodyout=object。
(3)实例化HttpTransportSE类的对象,调用transport.call(action,envelope)传送数据,其中 action为 WSDL中所要调用的接口函数soapaction。
(4)使用SoapObject result=(SoapObject)envelope.getResponse()获取返回的结果。
实现WebService数据在网络中传输所需的数据量较大,因此,需要将自定义类转换成Json格式的字符串String,然后再由服务器端添加一个第三方Json解析包,解析客户端传递的Json转换string的类型参数,这样不仅使数据量得到优化,而且提高了传输速率,减少了传输时间。
根据护士的需求和软件的特点,系统的功能设计如图2所示。
图2 系统功能结构
本系统开发使用了 SQLite[7]数据库,Android系统本身集成了SQLite,提供了一些新的 API来使用 SQLite数据库,通过使用这些API便可实现数据库操作。
本模块先调用WifiManager服务,检查平板电脑,确定打开WiFi,再通过WebService传入账号和密码进入主界面。同时,需要在AndroidMainfest.xml文件中设置获取WiFi权限和联网权限。
登录成功之后,系统会让主线程中通过new Thread()开启一个线程,通过WebService加载病人列表,并通过SoapObject函数getProperty来解析数据包,详细解析需查看SoapObject的API说明,解析后的数据以与服务器约定好的自定义类的形式存放在本地数据库SQLite[8-10]。由于 Android系统的主线程(UI线程)是安全的,线程与线程之间的通信可使用或继承Hander类的对象,通过发送Message互相通信。当系统主线程收到Message时,主线程开始加载显示从本地数据库读取的病人信息,并进行按照字母排序、位置排序以及搜素病人的操作。这三部分操作都是通过对SQLite数据库的数据进行排序、搜索操作的。通过使用和设置ListView控件及其适配器,将要显示的数据以视图的方式映射在ListView列表上,从而实现了数据与ListView的绑定。其流程如图3所示。
图3 获取病人信息流程图
当选择一个病人之后,系统会通过WebService[11]提供的接口传递参数numid(病人证件号)到服务器,以获取该病人的信息,默认显示对应病人的基本信息表。如果网络没有连接上,该页面会以Toast通知的形式出现提示,同时读取本地的数据库SQLite加载、显示之前下载的相对应的病人信息。如果连接成功,获取到的这些信息存在SoapObject对象中,通过getProperty解析获取该类每一个属性,同时,再把该病人的信息写入本地数据库SQLite以覆盖原来的数据,然后再将信息设置到Layout布局文件中,最后用Fragment类将信息显示出来。Fragment[11]是 Android3.0以上系统才有的特性,是为了解决不同屏幕分辩率的动态的UI设计。为此,需要在Activity中通过 getFragmentManager()获取 FragmentManager对象,通过FragmentManager类方法来更新UI。如果需要对修改后的病人信息进行保存,系统会通过WebService相应接口函数,将病人信息用SoapObject对象的addProperty(“param”,value)方法以参数的形式提交到服务器端保存。同时,由于病人信息是服务器和客户端约定好的自定义类,传递自定义类对象时,需要自定义类使用Json转化成String类字符串。
选择病情记录后,就会跳转到病情记录界面,需要开启另外一个线程从服务器获取信息。系统会在这时将病人证号numid通过WebService传递到服务器,获取SoapObject,根据病情记录相关类用getProperty解析SoapObject。病情记录页面上包含病情检查记录、实时病情记录记录以及医嘱记录。这些信息都将在网络获取之后,存放在本地SQLite数据库,每获取一次就会覆盖上次SQLite数据中相应信息,只保留一个副本。护士将实时检查的信息存储到实时病情记录中,通过WebService接口,将所需要提交的数据用addProperty方法发送至服务器。传递的信息同样是自定义类,因此必须使用Json类将其转化成字符串。
该模块主要是通过病人配合护士做一系列题目,然后计算出得分来评估病人的健康状态。单击健康评测,系统会列出历史评测记录。评测系统会先通过get-SharedPreferences[12]调用 SharedPreferences对象,写入选中病人证件号numid的键值对。SharePreference是Android系统轻量级存储器,可以用来保存和共享值或者参数。评测完成后,系统会将病人证号numid、评测项目名称及分数,通过WebService提交到服务器。同样病人的评测成绩也是自定义类,因此也需要Json化转化成字符串。
在Eclipse开发环境中,由远程服务器端模拟完成用于测试的相关病人信息,平板的系统为Android4.0,测试结果如图4所示。通过病人基本信息界面,可以查看相修改关信息,并将之保存到服务器。图5是病情记录界面,可以查看相关历史病情记录信息。除了上述界面之外,还有健康评测、评测试卷等界面。
通过使用第三方类库将WebService技术与Android应用程序开发相结合,实现了Android客户端与远程服务器之间的通信连接,同时可应用于护士查房系统。该系统具有一定的实用性,为医疗邻域的发展提供了一个良好的方案。
图4 基本信息界面
图5 病情记录界面
[1]高山.无线移动查房解决方案[J].中国数字医学,2007,2(3):53-55.
[2]杨丰盛.Android应用开发揭秘[M].北京:机械工业出版社,2010.
[3]倪红军,钱昌俊.基于 Android平台的自发短信系统设计与实现[J].电子技术应用,2012,38(12):126-129.
[4]李刚.疯狂Android讲义[M].北京:电子工业出版社,2010.
[5]肖维民,韦津华.基于WebService的车险移动勘察系统[J].计算机应用与软件,2012(6):239-241.
[6]闵现畅,黄理灿.基于Android平台的Web服务技术研究[J].工业控制计算机,2011,24(4):92-94.
[7]刘安站,贾晓辉.基于 Android的私密短信系统设计与实现[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开发范例大全[M].北京:人民邮电出版社,2011.
[10]王家林.大话企业级Android开发[M].北京:电子工业出版社,2011.
[11]戈改珍,解争龙,张琨.基于 Android的火车时刻表查询系统设计与实现[J].现代电子技术,2012,35(4):41-44.
[12]郭宏志.Android应用开发详解[M].北京:电子工业出版社,2010.