1、摘要在日常的生活中,疾病是我们每个人不可避免会发生的一件事。由于药物具有两重性,一方面可以治疗疾病,另一方面也可能产生不良反应,因此安全、合理用药是非常重要的。本应用是基于安卓平台开发的,以java语言为基础,从合理、安全用药的实际情况出发,在了解用户需求的基础上,提出了为用户提供用药指南的基本目标,并且实现了根据病症找药和相关药物的使用说明以及病症特征的具体介绍,帮助用户提供用药指导,使用户能够更合理、安全的用药。本文首先对Android的研究意义,技术简介以及开发环境进行介绍,然后就应用的需求进行一定的分析,设计出应用的流程和实现模块,最后运用Android技术实现应用的开发,给出应用的效
2、果图,具体介绍了应用的各个功能模块的设计特点和具体的实现方法。通过程序的设计,了解到程序中设计的不足,最后做出总结。关键字:界面布局,ListView图文混排,异步网络请求数据,数据解析,数据库设计AbstractIn daily life, disease is unavoidable each of us one of the things will happen. Because the drug has duality, on the one hand, can cure diseases, on the other hand can also cause adverse reacti
3、ons, so it is very important to safe and rational drug use. This application is based on the android platform development, on the basis of the Java language, starting from the actual situation of reasonable, safe drug use, on the basis of the understanding of user needs, put forward to provide the b
4、asic purpose of medication guide, and implements according to conditions for medicine and instructions on the use of the drugs and disease characteristics, the detailed introduction of help the user to provide guidelines, enables users to a more reasonable, safe drug use. This article first signific
5、ance to the research of Android, introduces the technology introduction and development environment, and then makes a certain analysis of application requirements, design the application process and the implementation of the module, the last use of Android technology application development, applica
6、tion effect is given, and concretely introduces the design characteristics of the application of each function module and the concrete implementation method. Through the design program, learned in the program design, finally make a summary.Key words: interface layout, ListView by mixed, asynchronous
7、 network request data, data analysis, database design目录1 引言11.1 课题研究意义11.2 技术简介11.3 国内外研究情况21.4 开发工具安装22 需求分析和总体设计42.1 需求分析42.2 功能模块设计52.3 总体框架设计和实现方法53 首页设计和具体实现63.1安卓的基本控件和容器的介绍63.2 首页界面设计和实现63.2.1首页界面63.2.2首页布局设计73.3.3首页功能实现84功能模块的设计和具体实现114.1 保健食品114.2 对症找药154.3 家庭药箱174.4 搜索205抽屉功能的设计和具体实现225.1
8、设置225.2 登录235.3 关于246 结束语257 致谢268 参考文献271 引言1.1 课题研究意义随着计算机的发展和智能手机的普及,由于安卓操作系统的可操作性强,使安卓迅速的成为现在主流的操作系统,安卓移动应用也越来越受到人们的喜爱。Android是由Google推出的一款开放的嵌入式操作系统平台,Android聚集了来自世界各地的开发者,越来越多的创意和思想被应用到Android应用程序的开发中,它在国内具有相当强劲的竞争优势,Android移动开发平台十分适合我国国内的开发环境。伴随着Google Android操作系统的发展,以及移动网络的迅猛发展,基于Android应用的移
9、动开发备受关注。因此在了解AndroidSDK的基础上,我开发了一款适应于Android操作系统的移动应用。本文从Android移动开发基础出发,在了解用户需求的基础上,设计出了完全适合Android操作系统的移动应用,并且详细阐述了Android的sqlite轻量级数据库存储技术以及各个界面的布局设计过程和网络请求数据等。1.2 技术简介安卓是由Google公司推出的基于Linux平台的开源手机系统,由操作系统、中间件、用于界面和应用软件组成主要适用于便携设备。Android的分层结构:应用程序、应用程序框架、系统运行库层、Linux内核。如图1-1 图1-1Android分层结构图Andr
10、oid的优点就是开源,便于开发人员更清楚的把握实现细节,提高开发人员的技术水平,在软件开发中限制相对比较少,使用户可以用到许多免费的软件。在Android中,开发者可以使用Java作为编程语言来开发应用也可以通过C/C+等作为编程语言来开发应用程序。在Java开发方面Android支持使用Java作为编程语言来开发应用程序,Android的java开发从接口到功能,都有很多的变化,由于java虚拟机本身的效率和资源占用,google重新设计了Android的java,以便能提高效率和减少资源的占用。Android本身是一个权限分立的操作系统,在这个操作系统中,每个应用都以唯一的一个系统识别身份
11、运行。系统的更多的安全功能通过权限机制提供。权限可以限制某个特定的进程的特定操作,也可以限制每个URI权限对特定的数据段的访问。Android的安全架构的核心设计思想是,在默认的设置下,所有的应用都没有权限对其他的应用、用户等进行较大的影响的操作。总而言之,Android是一款开放式的操作系统,并且提供了强大的SDK库和开放的理念,随着Android的快速发展,越来越多的编程者用各种语言开发Android应用程序,受到了众多开发者的欢迎成为真正意义上的开放式的操作系统。没有开发经验的开发者可以不断学习提高开发的能力,经验丰富的开发者可以方便的扩展到Android移动平台上来,利用Android
12、的独特功能开发新颖的移动应用。1.3 国内外研究情况近年来,随着科技的迅速发展以及移动互联网的宽带进一步扩展,智能手机的使用也越来越广泛。在众多智能手机操作系统中,谷歌的移动平台Android操作系统因它开源的优势成为手机市场最受欢迎的智能操作系统平台。Android的各种应用程序在市场中都有比较好的发展趋势,尤其以手机移动应用更是受到人们的广泛关注与喜爱。因为手机移动应用的便携性和实用性,使得Android手机拥有着庞大的用户人群,体现了Android手机应用的巨大的发展潜力。Android系统自推出以来,就以明显的优势逐渐扩大占有的市场份额,尤其在国外,android系统处于蓬勃发展的阶段
13、。在国内Android系统的应用已不仅局限于手机产业,而是已经扩张到相关领域,例如平板电脑、车载系统、电视STB、智能电器、智能会议系统等。课题以研究如何在Android手机平台上开发手机应用,研究学习了安卓的关键技术和具体的开发环境,该应用能够比较完整的实现其功能,方便人们查询疾病和药品,为人们的安全用药和合理用药提供了便利。1.4 开发工具安装为了在PC主机上得到Android的开发环境,我们选择在Windows操作系统中进行对Android开发环境的搭建,具体步骤如下:(1)JDK安装首先下载JDK,按照提示安装成功后,最重要的是进行环境变量的配置,步骤如下:我的电脑属性高级环境变量系统
14、变量中添加以下环境变量:Java_HOME值为:C:Program FilesJavajdk1.6.020(安装JDK的目录)CLASSPATH值为:;%Java_HOME%libtoolsjar;%Java_HOME%libdt jar;%Java _HOME%bin;Path值:添加C:Program FilesJavajdk1.6.020bin;(2)Eclipse安装可下载一个绿色版的Eclipse,无需安装,和安装版一样都能为Android开发提供功能。(3)Android SDK安装在AndroidDevelopers下载Androidsdkr07windowszip,下载完成后解
15、压到任意路径。运行SDK Manager.exe,点击Available Package。选择希望安装的SDK及其文档或者其它包,点击Installation Selected、Accept All、Install Accepted,开始下载安装所选包。下载完成后出现所有Androidsdkr07windows文件夹内容;(4)ADT安装ADT实际上是一个工具,它可以连接sdk和Eclipse,帮助Eclipse找到sdk打开Eclipse界面,进入进入菜单中的“Help” “InstallNewSoftware”,点击Add按钮弹出对话框要求输入Name和Location,完成之后,选择Wi
16、ndow Preferences;在左边的面板选择Android,然后在右侧点击Browse;并选中SDK路径,本机为;D:YJSHAndroidAndroidsdkr07windows;点击Apply、OK。配置完成。(5)创建AVD为使Android应用程序可以在模拟器上运行,必须创建AVD,步骤如下:在Eclipse中,选择Windows Android SDK and AVD Manager,点击左侧面板的Virtual Devices,再右侧点击New,填入Name,选择Target的API,SDCard大小任意,Skin随便选,Hardware目前保持默认值,点击CreateAVD
17、即可完成创建AVD。2 需求分析和总体设计 2.1 需求分析结合日常用药的实际情况,根据用户的需求,分析出主要实现以下几个功能: A) 对症找药1. 通过病症查找病症的具体介绍,方便人们及时发现疾病,预防疾病并通过病症的介绍找到治疗该疾病的药物。2. 可以查寻到关于疾病的治疗方法,方便人们根据自己的身体状况找到积极治疗疾病的方法。B) 保健食品1. 根据用户的需求提供如改善睡眠等要求来查找合适的保健品,根据保健品的种类找到合适的药物。2. 找到合适的药物查询到药物的具体介绍食用方法、注意事项等。方便人们了解药物的特性不仅给生活中用药提供了方便还提高人们的健康意识和对药物、保健的了解。C) 家庭
18、药箱1. 家庭药箱可以动态添加个人的药箱,使用户可以找到自己的药箱。2. 当药箱不需要是时,可以动态的删除个人药箱。D) 搜索根据要查找的药品,用户输入药品的首字母即可以查询出药品的名字和药品的生产公司。E) 设置设置中可以设置清除缓存来清除应用中的缓存。F) 登录通过登录功能可以登录到官方网站查询关于疾病和药物的相关信息等了解疾病和做到合理、安全的用药。G) 关于简要介绍关于应用的信息和相关的功能。2.2 功能模块设计系统中的主要功能模块及其结构关系如图2-1: 用药指南左抽屉搜索登录对症找药保健食品家庭药箱设置关于图2-1功能模块图2.3 总体框架设计和实现方法本设计按照所要实现的功能和总
19、体的设计分为以下的模块如图2-2:用药指南界面布局数据请求数据解析数据库设计缓存处理图2-2功能设计图3 首页设计和具体实现3.1安卓的基本控件和容器的介绍(1)安卓的容器常用的有LinearLayout线性布局,主要有两种类型,水平的线性布局和垂直的线性布局。水平的线性布局就是LinearLayout中的控件按照水平的方式排列;垂直的线性布局就是LinearLayout中的控件按照垂直的方式排列。RelativeLayout相对布局,相对布局是一个控件的位置决定于它和其他控件的关系,相对布局的好处就是比较灵活,控件的位置摆放不像线性布局那样单一,可以任意摆放控件的位置,但是缺点是掌握比较复杂
20、,控件的位置设置比较繁琐。 FrameLayout 框架布局,又叫帧布局,就是在一个屏幕上开辟出一个区域以填充所有的组件,实现屏幕的扩充,但是FrameLayout框架会将所有的组件都放在屏幕的左上角,而且所有的组件都是通过层叠的方式来进行显示,也就是说,它们都是从左上角处开始设置,然后一个覆盖着一个的显示。容器可以进行嵌套布局,使得布局变得更加灵活,更加方便的显示各个组件,使得布局更加合理,可以按照开发者的意愿进行设计。(2) 安卓的控件常用的有TextView文本显示组件主要用来显示文本信息。Button按钮组件主要用来实现点击的功能。EditText编辑框组件主要用来输入文本信息。Rad
21、ioButton单选钮组件主要用来实现单项选择的功能。ImageView图片视图组件主要用来实现图片显示的功能。ImageButton图片按钮组件主要用来实现含有图片的按钮功能。3.2 首页界面设计和实现3.2.1首页界面首页界面的实现效果如图3-1:图3-1首界面3.2.2首页布局设计该界面采用的是抽屉侧滑的布局,通过查阅API来解决的,采用在Android扩展的包中的组件DrawerLayout,是一个很好的侧边栏,支持手势打开主界面。首页上部分采用的是LinearLayout完成布局设置,嵌套RelativeLayout相对布局,下部分采用的是GridView网格视图设置功能模块的布局。
22、设置线性布局的高度和宽度为填满,线性布局的排列方式设置为垂直排列。 设置相对布局的宽度为填满,高度为350dp,相对布局的背景设置为res文件夹中drawable中的图片背景。 设置图片的高度和宽度为根据内容调整,对齐方式为水平居中,垂直居中,图片设置为res文件夹中drawable中的图片。 设置左上角的图片的高度和宽度为根据内容调整,与父控件的左对齐,设置距离父控件的上部10dp,图片背景设置为res文件夹中drawable中的图片。点击左侧的按钮展开左侧抽屉。 设置搜索框的高度和宽度为根据内容调整,设置搜索框位于图片下部,水平居中,背景为从res文件夹中drawable读取中的图片,文本
23、属性设置为可点击效果,左边设置搜索的图标,图片同样来自drawable中,对齐方式设置为垂直对齐,文本的信息内容设置为空时显示的文字提示信息,输入时提示信息自动消失,设置点击操作的方法为search,点击时调用search方法执行操作。 首页下部的布局为网格布局,设置网格布局的高度和宽度为根据内容调整,网格布局的显示列数为两列,设置缩放与列宽大小同步,垂直边距和水平边距均为1dp。 左边的抽屉布局设置为框架布局,高度为填满和,宽度为200dp,框架布局的对齐方式为左对齐,背景设置为白色。 3.3.3首页功能实现 (1)GridView效果实现采用集合接口ArrayList来动态添加数组,添加的
24、主要有图片和文本信息,再使用SimpleAdapter设置将图片和文本信息添加到GridView中,首先要先设置GridView中每项的布局控制文件,在相对布局中设置ImageView和TextView组件来分别设置图片和文本信息,最后将GridView中的每项设置监听事件setOnItemClickListener,实现点击效果,进入相应的功能模块。ArrayListHashMap items = new ArrayListHashMap();for (int i = 0; i 4; i+) HashMap map = new HashMap();map.put(itemImage, ima
25、gesi);map.put(itemText, titlesi);items.add(map);SimpleAdapter saImageItems = new SimpleAdapter(this, items,R.layout.grid_item, new String itemImage, itemText ,new int R.id.image_item, R.id.text_item );gridView.setAdapter(saImageItems);gridView.setOnItemClickListener(new OnItemClickListener() );(2)左侧
26、抽屉效果实现抽屉打开效果首先找到布局中的ImageButton组件,为组件设置监听setOnClickListener,使用openDrawer方法实现打开左边抽屉的效果。左边的抽屉同样要设置监听并重写方法实现打开展示效果。openButton.setOnClickListener(new OnClickListener() public void onClick(View v) drawerLayout.openDrawer(Gravity.LEFT);/ 从左边拉出抽屉);drawerLayout = (DrawerLayout) findViewById(R.id.drawerlayou
27、t);drawerLayout.setDrawerListener(new DrawerListener() public void onDrawerStateChanged(int arg0) / TODO Auto-generated method stubpublic void onDrawerSlide(View arg0, float arg1) / TODO Auto-generated method stubpublic void onDrawerOpened(View arg0) / TODO Auto-generated method stubpublic void onDr
28、awerClosed(View arg0) / TODO Auto-generated method stub);左侧抽屉采用ListView列表显示组件显示,在FrameLayout中加入ListView组件,将显示的文本信息设置,登录,关于加入到ListView中,并对ListView设置监听setOnItemClickListener实现点击进入相应列表项的效果。listView = new ListView(this);listView.setAdapter(new ArrayAdapter(this,android.R.layout.simple_expandable_list_it
29、em_1, this.data);(FrameLayout) findViewById(R.id.left_drawer).addView(listView);listView.setOnItemClickListener(new OnItemClickListener() );(3)双击退出效果实现设置返回键的点击效果,在主界面的时候,点击一次提示“再按一次退出程序”,采用定时器Timer,用来在一个后台线程计划执行指定任务,它可以按计划一次或反复多次执行一个任务。Timer类执行schedule模式,指定任务重复执行的频率。抽象类TimerTask是被Timer计划的任务。这样可以设置在2
30、秒内再次按下返回键则退出,否则不退出该程序。public boolean onKeyDown(int keyCode, KeyEvent event) if (keyCode = KeyEvent.KEYCODE_BACK) Toast.makeText(MainActivity.this, 再按一次退出程序, Toast.LENGTH_SHORT).show();Timer tExit = null;if (isExit = false) isExit = true;tExit = new Timer();tExit.schedule(new TimerTask() Overridepubl
31、ic void run() isExit = false;/ 退出程序, 2000);/ 如果2秒钟内没有再按下返回键,则启动定时器取消掉刚才执行的任务 else finish();System.exit(0);return false;4功能模块的设计和具体实现4.1 保健食品(1) 界面效果如图4-1,图4-2,图4-3,图4-4: 图4-1保健食品一级界面 图4-2保健食品二级界面 图4-3保健食品三级界面 图4-4保健食品四级界面(2) 界面布局设计与实现:图4-1,4-2,4-3采用布局复用,使用相同的布局:整体采用相对布局,相对布局中嵌套一个线性布局,上面的线性布局显示界面头部效果
32、,下面布局显示ListView。ListView设置高度和宽度为填满,位置设置在头部LinearLayout的下部,与界面的底部对齐。图4-4的布局采用的是相对布局,相对布局中嵌套两个线性布局,显示药品详情的采用的是ScrollView滚动视图。上面的线性布局文件加入ImageView组件设置删除该页面功能,图片设置为点击效果,在drawable中btn_delete布局文件选择器设置未点击和点击两种不同的效果。selector xmlns:android= (3)检查网络连接,需要在androidmanifest中设置用户权限获取网络权限和获取网络状态,得到系统连接服务器的状态,返回获得代表
33、网络连接状态的对象,判断如果没有网络则提示请检查网络。代码如下:try ConnectivityManager manager = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);/ 获取系统的连接服务NetworkInfo info = manager.getActiveNetworkInfo();/ 获取代表联网状态的NetWorkInfo对象return (info != null & info.isConnected(); catch (Exception e) return fa
34、lse;if (!NetHelper.IsHaveInternet(getApplication() Toast.makeText(HealthFoodActivity.this, 请检查网络, Toast.LENGTH_SHORT).show();使用ProgressDialog提示网络请求,当进行网络请求时弹出进度条对话框提示正在加载,请稍后,请求结束后进度条对话框自动消失。(4)请求数据,数据的请求可以分为同步请求以及异步请求,同步请求就是指主线程阻塞,在主线程中使用该请求方法会使应用程序阻塞而不会做出任何用户事件。因此,在应用程序设计时,大多都是会另开启专门的子线程来响应事件,或者用异
35、步请求来代替来增加用户的体验。异步请求会更加精准控制事件。异步请求的优点是不会阻塞当前线程,但是相对于同步请求来讲会相对比较复杂一些,至少要在程序中加入回调的方法来获取异步事件响应的数据。下面采用的是异步网络请求。public class DrugsAsyncTask extends AsyncTask Overrideprotected byte doInBackground(String. params) / 每次的进度处理、可以更新ui组件String url = params0;/ 从url中 截取到body中的信息byte data = (url.substring(url.inde
36、xOf(?) + 1).getBytes();/ ?json = HttpUtils.post(url, data, true);/try JSONObject jsonObject = new JSONObject(getJsonData();if (jsonObject != null & jsonObject.optBoolean(success) DataShared dataShared = new DataShared(context);if (!dataShared.contains(url) dataShared.beginEdit();dataShared.persistent(url, getJsonData();dataShared.endEdit(); catch (JSONException e) e.printStackTrace();return json;Overrideprotected void onPostExecute(byte result) / 该方法将在执行实际的后台操作前被UI/ thread调用,可以在该方法中做一些准备工作super.onPostExecute(result);if (cb != nul