Android客户端设计方案.ppt_第1页
Android客户端设计方案.ppt_第2页
Android客户端设计方案.ppt_第3页
Android客户端设计方案.ppt_第4页
Android客户端设计方案.ppt_第5页
已阅读5页,还剩25页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第5章 Android客户端设计,倚动实验室,网络资源:/book,QQ群(App开发案例教程-清华) :262779381,CONTENTS,5.1,“豹考通”Android客户端概述,目录,5.2,“豹考通”Android客户端主要功能和流程,5.3,“豹考通”Android客户端关键技术分析,5.4,“豹考通”Android客户端程序结构分析,“豹考通” Android客户端主要是为了方便Android手机用户能够随时随地查询志愿报考相关信息,主要功能包括: 查询各个学校甚至各个专业历年的录取线并生成趋势图; 根据考生高考分数与意向省份推荐学校; 查询省份历年的省控线。 实现这些功能,必然涉及到大量数据的处理,Android客户端本身并不做大量的数据存储和复杂的数据处理工作,只提供相应功能的良好用户界面,方便用户选择或输入查询条件,然后向网络服务器发送请求获取查询结果,最后解析服务器返回的结果,并以一种用户容易理解的方式显示在手机上。数据的存储和复杂的数据处理工作全部在服务器端执行。 豹考通IOS端开发需要用到的数据库表有: 专业表 地区表 批次表 科类表 学校表 省控线表 学校录取线表,5.1“豹考通”Android客户端概述,Android客户端的主要界面如下图所示。,图1主功能界面图,图2更新考生基本信息页面,主界面中提供了各核心功能之间跳转的接口,能够快速进入相关页面。,该界面用于保存用户的基本信息,系统根据用户信息提供搜索结果。,图5-3学校录取线查询结果,5-4学校历年录取线趋势图,该界面根据学校录取线与省控线差距生成趋势图。,该界面以列表的形式显示学校在某一地区历年的录取线信息。,图5根据高考成绩推荐学校,图6省控线查询结果,该界面显示系统根据用户信息和意愿推荐的若干个最符合要求的院校,该界面显示省控线查询结果,5.2“豹考通”Android客户端主要功能和流程,“豹考通”Android客户端主要功能包括用户注册、登录、注销、查询学校历年录取线、根据学校历年录取线与省控线差值生成录取线趋势图、查询学校投档线、查询各省份历年的省控线、根据考生分数和考生意向省份等推荐学校、查询学校招生办联系信息以及学校各专业负责人联系信息、填写和更新考生信息并保存到本地、关于我们等功能。,图7“豹考通”Android客户端功能结构图,“豹考通”Android客户端中各功能的跳转主要是通过主界面来完成的,通过主界面可以跳转到查询录取线、推荐学校、查询省控线和关于我们等功能界面,“豹考通”Android客户端主要功能流程图如图8所示。,图8“豹考通”Android客户端主要功能流程图,5.3“豹考通”Android客户端关键技术分析,通过Android客户端主要功能和流程分析可知,“豹考通”软件Android客户端所涉及到的关键技术如下: 各功能界面设计和事件处理 功能间切换和页面跳转 读取和更新本地配置信息 Android客户端与服务器端交互(发送请求和获取结果) 网络服务器端返回结果解析(JSON解析) 解析结果展示(自定义Adapter) 根据数据绘制趋势图(自定义控件),5.3.1功能界面设计和事件处理,“豹考通”Android客户端各主要功能界面都保持一致的界面风格,顶部为一排核心功能按钮,方便切换,底部为显示宣传信息的文本框,中间则显示界面的核心内容。其中顶部和底部内容是固定不变的,而中间部分则会根据功能不同而有所区别。对于中间部分,又可以分为两种类型,一种是显示查询界面,方便用户输入或选择查询条件;一种是显示查询结果界面。 第一种类型界面中通常包含一个标题,然后通过表格布局来存放各个选择或输入控件,具体分析如图9所示。,图5-9 “豹考通”核心功能界面分析,图5-10 界面中中间内容分析,第二种类型界面中通常包含一个标题,用于表示该界面显示的是什么信息,然后是列表的标题,最后是具体的每一项信息,如图10所示。,“豹考通”中事件处理主要涉及到按钮的单击事件、下拉列表的选中事件、以及列表对话框的选中事件等,对于按钮的单击事件主要采用直接绑定到标签的方式处理,而其它事件则通过相应的事件监听器来处理。,在Android中,功能间切换和页面跳转通常有两种方式: 修改当前的布局文件或改变其内容; 创建一个新的Activity覆盖当前的Activity或销毁当前的Activity。 “豹考通”软件中,各主要功能界面风格一致,有相同的框架,仅仅中间部分内容不同,因此采用前者较多,使用一个布局占位,每个功能界面使用一个Fragment来表示,然后将Fragment嵌入到主界面中间部分的那个用于占位的布局中,当需要实现功能切换时,则用新功能的Fragment替换原来的Fragment。而对于界面风格差异较大的页面,则采用第二种方式,每个功能界面使用一个Activity表示,当需要切换时,则启动一个新的Activity覆盖原来的Activity。需注意的是每个Activity都必须在清单文件中注册。,5.3.2功能间切换和页面跳转,“豹考通”软件第一次启动时需要用户填写个人基本信息,后面再打开该软件则直接跳转到主界面并读取用户信息,因此软件启动时需要判断用户是不是第一次启动软件。通常做法是提供一个布尔类型变量标记是否第一次启动,由于每次软件启动后,程序都会重新执行,上一次在程序中标记的内容,下一次启动时会重置,达不到判断的目的。如果想让上一次启动时,对软件的操作影响到下一次,则需要把相关内容进行持久化保存,即保存到本地文件中,然后每次启动时,都从本地文件中读取相关内容,这样就可以达到多次启动软件共享信息的目的。 在Android中,将内容保存到本地文件有多种方式: 通过流来操作本地文件,通过输入流读取文件,通过输出流将内容写入到文件; 通过SharedPreferences保存一些简单的键值对信息,系统将这些信息自动保存到相应的xml文件中,通过SharedPreference读取内容,通过其内部接口Editor写入内容; 通过SQLite数据库来保存数据,通常是一些结构较为复杂的数据,通过数据库封装类SQLiteDatabase来执行相应的增删查改操作。,5.3.3读取和更新本地配置信息,Android客户端与服务器端交互方式通常有两种: 直接采用Android内置的HttpClient发送HTTP请求和获取HTTP响应; 利用ksoap2-android项目,调用服务器端提供的WebService。 “豹考通”项目中采用第一种方式,通过HttpClient与服务器端进行交互。HttpClient是Apache开源组织提供的一个项目,HttpClient开发过程中所涉及的类主要包含以下几个:,5.3.4Android客户端与服务器端交互,n HttpClient n HttpGet n HttpPost n HttpResponse n HttpEntity,图11 HttpClient发送请求的过程(get请求),这些类又是如何协同工作共同来完成Http请求和获取响应信息的呢?,图11 HttpClient发送请求的过程(post请求),这些类又是如何协同工作共同来完成Http请求和获取响应信息的呢?,无论是使用HttpGet,还是使用HttpPost,都必须通过以下3步来访问HTTP资源:,1、创建HttpGet或HttpPost对象,将需请求的URL通过构造方法传入HttpGet或HttpPost对象。 2、使用DefaultHttpClient类的execute()方法发送HTTP GET或HTTP POST请求,并返回HttpResponse对象。 3、通过HttpResponse接口的getEntity()方法返回响应信息,并进行相应的处理。,注意:如果使用HttpPost提交HTTP POST请求,还需要使用HttpPost类的setEntity()方法设置请求参数。访问网络时,需要在清单文件中添加访问网络的权限,此外,在Android高版本中(Android3.0以上),将访问网络看做是一种较为耗时的操作,不能直接在主线程中访问网络,需要单独启动线程或通过异步任务来访问网络。,5.3.5 网络服务器端返回结果解析JSON解析,服务器端响应客户端请求返回结果的表示方式有多种,既可以是具体的HTML页面、也可以是存储结构化数据的XML文件,还可以是JSON格式的字符串等等。“豹考通”项目中,客户端与服务器端数据交互采用JSON格式,通过谷歌提供的第三方Jar包GSON来实现JSON格式字符串的生成和解析。 JSON(JavaScript Object Notation)JavaScript对象符号,是一种轻量级的数据交换格式,JSON采用完全独立于语言的文本格式,既易于人阅读和编写,同时也易于机器解析和生成。JSON中主要有两种数据结构: 由key-value对组成的数据结构,这种结构在不同语言中有不同的实现,例如在C语言中是一个struct,在Java中是一种Map结构,在JavaScript中则是一个对象等。 有序集合,这种数据结构在不同语言中,可能是列表、集合、数组等实现。,“豹考通”项目中使用Google提供的GSON来实现Java 对象和 JSON 数据之间转化,Java对象与JSON数据之间的转化主要包含两种: 将Java对象转换成JSON格式,只需要调用GSON对象的toJson()方法,并将Java对象作为参数传递即可; 将JSON格式的字符串转换成一个Java对象,只需要调用GSON对象的fromJson()方法,传递两个参数,一个是需要转换的JSON格式的字符串,一个是需要转换的对象的类型。详细代码会在后面的具体模块实现部分列出。,5.3.5 网络服务器端返回结果解析JSON解析,5.3.6 解析结果展示-自定义Adapter,“豹考通”项目中大部分是实现查询功能,查询结果往往不止一条,因此,返回结果解析出来后往往是某个对象的集合。Android中,展示集合最好的方式就是使用Spinner(下拉列表)、ListView(列表)、GridView等列表控件,这些控件有一个共同的特征就是本身不与数据关联,需要借助于中介Adapter,Adapter用于指定控件中显示的数据来源,以及各项信息内容以及信息显示的样式如大小、颜色、位置等,然后通过控件的setAdapter()方法将控件与Adapter关联起来。 Android中针对ListView的一些常见用法提供了相应的Adapter,主要包括ArrayAdapter、SimpleAdapter、BaseAdapter、CursorAdapter等,Adapter层次结构如图12所示。,图12 Adapter层次结构图,ArrayAdapter适合于列表项中只包含一个文本的情景,SimpleAdapter比较适合于列表项结构较为复杂的情景,CursorAdapter比较适合于将数据库中查询的结果转为列表的情形。由于“豹考通”项目中结果通常是某个对象的集合,而SimpleAdapter中的数据源中每一项是一个Map对象,转换起来较为繁琐,此外SimpleAdapter难以实现奇偶项表现形式不同的效果,因此项目中大部分的Adapter采用自定义Adapter,即从BaseAdapter继承而来,实现以下几个抽象方法。 getView():返回列表中每一项显示的视图,可以是一个结构复杂的布局对应的View,也可以是简单的TextView或ImageView; getCount():返回列表中项的个数,根据这个值循环填充列表; getItemId():返回指定项的ID; getItem():返回指定项的对象。 其中getView()方法和getCount()方法最为关键,通过getCount()方法即可知道列表中一共有多少项,然后通过getCount()次循环调用getView()方法,获取每一项数据,并将每一项信息添加到ListView中即可形成包含数据的列表。,5.3.7 绘制趋势图自定义控件,在Android中绘制相关图表,可引用第三方Jar包,也可以通过自定义控件根据内容进行绘制和显示。最常见的绘制图表的第三方开源框架就是AchartEngine,由于“豹考通”项目中只需要绘制简单的折线图,在此直接采用自定义控件的方式来绘制折线。 由于学校每年的录取线与当年的省控线有关,每年的录取线绝对值可能差别很大,但是录取线相对于省控线的差值则非常相近,因此绘制时绘制的是录取线相对于省控线的差值的趋势图。为了使折线图在不同尺寸手机上的效果大致相同,绘制折线时尽量避免使用绝对位置,推荐根据手机尺寸计算相对值。 例如根据需要显示的数据个数来平均分割横坐标,取最大值和最小值的平均值作为中线,然后根据控件高度来计算每个单位所对应的高度,比平均值大则位于中线的上方,比平均值小则位于中线的下方,具体的高或低多少则根据单位像素乘以总的差值。,5.4“豹考通”Android客户端程序结构分析,“豹考通”Android客户端程序源码结构如图13所示。,图13 “豹考通”Android客户端程序源码,图14 NewScore项目程序文件结构图,“豹考通”各主要功能和业务逻辑实现包含在NewScore项目中,该项目的程序文件结构以及各文件的功能说明如图14所示。程序源文

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论