互联网 + 创新创业实战系列教材 实战案例教程 钟元生赵圣鲁主编 江西高校出版社 二 O 一七年七月

Size: px
Start display at page:

Download "互联网 + 创新创业实战系列教材 实战案例教程 钟元生赵圣鲁主编 江西高校出版社 二 O 一七年七月"

Transcription

1

2 互联网 + 创新创业实战系列教材 实战案例教程 钟元生赵圣鲁主编 江西高校出版社 二 O 一七年七月

3 图书在版编目 (CIP) 数据 实战案例教程 / 钟元生, 赵圣鲁主编. - 南昌 : 江西高校出版社, ISBN Ⅰ.1A... II.1 钟...2 赵...Ⅲ.1 移动终端 - 应用程 序 - 程序设计 - 教材 IV.1TN 中国版本图书馆 CIP 数据核字 (2017) 第 号 出版发行社址邮政编码总编室电话销售电话网址印刷经销开本印张字数版次印数书号定价 江西高校出版社江西省南昌市洪都北大道 96 号 (0791) (0791) www. juacp. com 南昌市光华印刷有限责任公司各地新华书店 787 mm x 1092 mm 1/ 千字 2017 年 8 月第 1 版第 1 次印刷 0001~2000 册 ISBN 元 赣版权登字 版权所有侵权必究

4 内容简介 围绕一个真实项目, 通过一个个小案例, 引导读者短时间内熟悉一个综合 App 的开发, 以培养 App 程序员的独立开发能力 全书包括 App 项目体验 需求分析 App 全栈开发微案例 无对话框的单页界面设计 含对话框单页界面设计 多页面切换效果设计 绘制趋势图 使用工具管 理 SQLite 数据库 SQLite 数据库的操作模块设计 使用 MySql 管理网络数据库 App 网络服务器端设计 App 客户端与服务器交互设计 App 集成测试和 创业思维训练 本书适合作为 App 开发 实训课程教材, 可供项目经验少的学生开发实用 App 时参考, 也可作为大学生 互联网 + 创新创业竞赛的实战指导书 微信公众号 :yd-lab 实验室网址 : Q Q 群 : 倚动图书网 :

5 作者简介 钟元生,1968 年生, 江西财经大学教授, 博士生导师, 浙江 大学博士, 美国加州大学尔湾分校访问学者, 江西省人民政府学 位委员会学第一届 二届学科评议组成员, 江西省普通高校本科 教学指导委员会计算机类专家委员, 江西省物联网与大数据工程 技术研究中心主任, 软件与通信工程学院学术委员会主任 教育 技术学硕士点研究生导师组组长 教育技术研究所所长 参与创 办江西财经大学软件学院, 曾任计算机应用技术 软件工程等专业硕士生导师, 学 校本科水平评估工作评建创优专家组副组长 ; 国家职业技能鉴定专家委员会电子商 务专业委员会委员, 中国电子学会初级电子信息工程师职业资格认证工作委员会成 员 ; 省计算机学会理事 ; 江西浙大校友会理事, 浙江大学江财校友会副会长 ; 科技 部科技支撑计划会议评审专家 两届江西省研究生学位点评审专家 一届江西省教 学成果奖评审专家 ; 教育部主管 清华大学主办的 现代教育技术 期刊审稿专家 ; 江西省教育厅大学生手机软件设计赛发起人 总策划 ; 获江西财经大学 十大优秀 研究生导师 和 教学十佳 等称号 主持国家自然科学基金 1 项 副主持 2 项 ; 完成省级以上课题 9 项 获省级优 秀教学成果奖 4 项 (2 项第一主持且获一等奖 ), 出版专著 2 部, 主编教材多部在清 华大学出版社 电子工业出版社等处出版 赵圣鲁,1990 年生, 江西信息应用职业技术学院教师, 江西 财经大学软件与通信工程学院教育技术学硕士毕业, 研究方向为 移动学习与手机软件开发技术方向, 专攻手机软件开发人才培养, 具有多年的 App 开发和教学经验 参编教材 App 开发案例教程 (2015 年清华大学出版社出版 )

6 前言 互联网 + 创业公司中,App 是标配 现有教材多数重点讲述服务器端 客 户端以及数据库等之一部分, 对应于软件项目组中服务器程序员 Android/iOS 程序 员 数据库程序员等岗位, 比较适合有一定规模的公司 目前许多培训机构以及高校都是按某一类岗位的要求来培养程序员的, 要找到这类程序员更容易 很多时候, 企业希望程序员同时承担设计服务器端 客户端和数据库等多个岗 位的任务, 即有全栈工程师的能力, 初创公司尤其如此 即使在程序员分工较细的公司, 如果程序员具有全栈工程师的基本能力, 不同岗位的程序员更易合作 随着全国大学生 互联网 + 创新创业竞赛的不断推进, 许多学生都想将自己 的好点子用 App 实现, 往往就卡在最终 App 的实现上, 创意落地难 教材为满足全栈工程师的培养要求, 既要有一个完整的综合案例, 又要能将案 例拆分为一个个可独立运行 可测试的小例子 读者边学边做, 边检验自己的知识 掌握程度, 学完全书即完成完整项目 这类教材设计比较难, 市面少见, 本书尝试之 本书案例选自早期 豹考通 App 的简化版, 介绍了该 App 的 Android 客户端 程序 服务器端数据库 服务器管理程序开发以及 App 项目集成测试的全过程, 并特设了 互联网 + 创业思维训练内容, 使全栈工程师培养更有价值 假定读者有 一定的编程语言基础, 对 App 开发和 Android 编程有一定的了解 案例的有些代码较长, 有些模块本书只列出关键代码, 基于这些关键的代码讲解, 读者可以访问教学资料的网站下载完整代码, 边阅读代码边体验程序效果, 并 扩充或修改程序功能 为方便阅读, 书中的每段代码都引入了代码编号, 部分关键 语句加了注释, 并给出程序在资源包中的位置 程序清单 :Code0401\app\src\main\java\cn\jxufe\iet\code0401\ControLineActivity.java private class MyItemSelectedListener implements 1 AdapterView.OnItemSelectedListener { 3 public void onitemselected(adapterview<?> parent, View view, 4 int position, long id) { 5 switch (parent.getid()) { 6 case R.id.areaSpinner:// 如果是选择省份列表 7 sourceareaid = position; 8 break; 9 case R.id.yearSpinner:// 如果是选择年份列表 20 } 21 /* 设置标题显示 */ 22 controllinetitle.settext(html.fromhtml("<font color=red><b>" 其中 为代码行号, 中间为代码实际内容,// 后为注释内容 程序清单的位置也详细标注, 便于读者查找下载 I

7 在您阅读本书时, 最好按照书中的步骤同时实际操作, 加深印象, 掌握关键技术, 不建议仅直接打开源码运行 查看最后效果 编程基础较弱者, 也可泛读全书 体验 App 开发流程和关键细节 尽量多在涉及相关技术时, 参考相关教材或网络资源 本书作为一种尝试, 我们反复对案例选择和教材结构 教法 编法等进行研究与设计, 历经一年半, 撰写了几十个版本, 进行了三次大规模修改, 方得以展现在读者面前 尽管如此, 依然有许多不尽人意的地方, 如尚未完全实现方便的模块设 计和集成测试, 课后练习不够完善, 学习效果过程检查点偏少 为方便学习 交流与资源共享, 我们提供了本书相关资源的下载地址, 网址为 : 全书由钟元生担任主编, 负责全书的方案设计 内容策划 案例分解 细节把握 质量控制和统编定稿工作 各章分工如下 : 钟元生完成第 0 章 第 2 章并与其 他作者合作完成其余各章的撰写, 赵圣鲁负责第 1 章 第 4 章 第 5 章 第 12 章, 钟坚负责第 3 章 第 11 章, 邹宇杰负责第 6 章 第 7 章, 吴凯负责第 8 章 第 9 章 第 10 章, 涂露露负责第 13 章, 廖琪玲负责第 14 章 高成珍 陈海俊 曹权为 豹考通 教学版的前期开发作了重要贡献 在此, 特别感谢支持本书编写出版工作的江西财经大学软件与通信工程学院 江西高校出版社有关领导和老师的帮助 希望本书的出版有助于 App 开发实训 课程的教师备课 ; 有助于教师更好地 指导移动互联网软件方面的毕业设计, 提高指导效率 不当之处, 还望大家批评指正, 以便将来再版时完善 本书适合作为本专科 App 开发 课程实训教材, 供无项目经验学生开发 App 时参考, 可作为大学生 互联网 + 创新创业竞赛的实战参考书 编者 于江西财经大学麦庐园 2017 年 6 月 II

8 目 录 第 0 章导读 开发概述 App 开发流程 案例介绍 本书教学中所用到的学习案例代码 配置局域网运行和开发环境 本书内容简介 课后练习... 8 第 1 章 App 应用体验 豹考通 项目介绍 开发环境配置 Java 语言 Java 环境配置 Android Studio 下载和安装 Android Studio 下载 Android Studio 安装 创建第一个项目 :HelloWorld 创建一个虚拟机设备 豹考通 服务端集成包运行 豹考通 Android 端程序导入运行 项目导入 客户端运行效果图 豹考通 项目客户端结构图 课后练习 第 2 章项目需求分析 功能需求分析 需求获取 功能分析 系统 UML 建模 系统用例分析 I

9 实战案例教程 系统用例图 系统用例描述 项目数据库分析 数据库基本概念 数据库设计的基本过程 系统所涉的实体及其属性 课后练习 第 3 章 App 全栈开发微案例 微案例介绍 本地数据版 App 案例 Android 界面设计 Android 功能实现 网络数据版 App 案例 建立 MySQL 数据库 设计网络服务器 建立数据库连接类 建立省控线实体类 数据库操作类的实现 Servlet 类的实现 Android 功能实现 建立实体类 建立服务器访问工具类 修改 demo.java Activity 文件 课后练习 第 4 章无对话框的单页面设计 本章案例实现流程 历年省控线查询 模块实现 界面设计 Spinner 实现下拉列表选项 事件监听器 ListVIew 列表 历年录取线查询 模块实现 界面设计 历年录取线筛选条件栏实现 事件监听器 II

10 目录 ListView 列表 课后练习 第 5 章含对话框单页面界面设计 本章案例实现流程 报考咨询 模块实现 界面设计 问题列表 的实现 问题回复 对话框实现 个人基本信息 模块实现 界面设计 SharedPreferences 实现个人信息存储 个人基本信息填写对话框 模块实现 课后练习 第 6 章多页面切换效果设计 本章案例流程 多页面切换效果了解 页面切换框架实现 项目结构 Tabhost 界面布局文件设计 为选项卡添加样式 初始化选项卡设计 为选项卡对应添加内容 创建空 fragment 布局文件及其加载类 事件监听实现多页面切换 多页面内容填充 替换 page1.xml 页面为 省控线页面 替换 xml 布局文件 替换 java 类 替换 page2 页面为 录取线查询 页面 替换 xml 布局文件 替换 java 类 课后练习 第 7 章绘制趋势图 本章案例流程 绘图功能了解 III

11 实战案例教程 7.3 项目结构 趋势图页面框架实现 趋势图 java 类的建立 在 xml 文件中引用自定义的趋势图控件 用绘图类绘制坐标轴 使用 Paint 类设置画笔 创建 ondraw() 方法 绘制趋势图的坐标轴 绘制 x 轴 y 轴直线 绘制坐标轴的箭头 绘制坐标轴上的文字 用绘图类绘制趋势线 - 源数据来自数组 创建模拟数据 根据源数据绘制信息点 绘制 x 轴上的信息 根据源数据绘制趋势图 用绘图类绘制趋势线 - 源数据来自录取线页面 编写按钮点击事件和业务逻辑 基本实现过程 使用 Android Studio 导入 Gson 包 编写趋势图相关 Activity 和 Fragment 编写趋势图 Fragment 类 编写趋势图的 Activity 为 ResultActivity 进行注册 课后练习 第 8 章使用工具管理 SQLite 数据库 了解 SQLite SQLite 优点 SQLite 使用入门 安装使用 SQLite SQLite 常用操作 创建 SQLite 数据库 --bkt 创建数据库 创建地区表 (area) 插入地区表 (area) 数据 IV

12 目录 创建学校表 (school) 导入学校表 (school) 数据 课后练习 第 9 章 SQLite 数据库的操作模块设计 本章案例流程 用 SQL 代码创建数据库及表 项目结构 案例实现 SQLite 数据库存储 SQLiteDataBase 类 SQLiteOpenHelper 类 Cursor 接口 ContentValues 类 使用 SQL 语句操作数据库 从 SQLite 获取 ListView 列表项的值 项目结构 案例流程模块 定义全局变量类 数据库操作辅助类 替换地区 (area) 表数据 替换学校 (school) 表数据 课后练习 第 10 章使用 MySQL 管理网络数据库 MySQL 数据库的构建 MySQL 的应用范围 MySQL 的优缺点 MySQL 安装 数据库可视化工具安装和介绍 Navicat for MySQL 下载 Navicat for MySQL 安装 豹考通 项目数据分析与设计 数据库表设计 各表的结构设计 建库 建表操作 使用 SQL 语句建表 V

13 实战案例教程 SQL 语句讲解 制作推荐报告举例 项目数据导入与导出 Excel 表格导入数据库表 SQL 文件导入库 数据导出 课后练习 第 11 章 App 网络服务器管理程序设计 服务器开发背景知识 JSP 简介 Tomcat 服务器 服务器与客户端交互图解 了解 Java Web 技术 DAO 设计模式 认识 Java Web 程序的目录结构 Java Web 核心技术 JavaBean 技术 运行你的第一个 Java Web 程序 Servlet 技术 掌握 HttpServletRequest 类 掌握 HttpServletResponse 类 实战演练 设计 App 服务器数据库工具类 JDBC 技术 数据库连接类的实现 设计 App 服务器业务逻辑类 建立实体类 数据库操作类的实现 练习 设计 App 服务器 Servlet 类 省控线 Servlet 类的实现 练习 设计 豹考通 服务器问题模块 建立问题模块实体类 数据库问题模块操作类 VI

14 目录 问题模块 Servlet 类 课后练习 第 12 章 App 客户端与服务器交互设计 客户端和服务端数据交互基础 HttpClient 网络服务器端返回结果解析 JSON 解析 本章案例实现流程 第三方 Jar 包导入 客户端与服务端交互工具类设计 省控线查询 模块与服务端交互的实现 省控线查询 模块与服务端交互流程 获取服务端数据 显示省控线数据列表 历年录取线查询 模块与服务端交互的实现 历年录取线查询 模块与服务端交互实现流程 获取服务端学校录取线和专业录取线 显示学校录取线和专业录取线列表 报考咨询 模块与服务端交互的实现 报考咨询 模块与服务端交互流程 获取历史问题列表 提问 模块实现 问题回复 模块实现 查询问题 模块实现 课后练习 第 13 章 App 集成测试 单元测试 黑盒测试 白盒测试 集成测试 MySQL 数据库测试 Jave Web 服务器访问 MySql 数据库集成测试 Android 客户端访问 Java Web 服务器集成测试 豹考通 案例集成测试流程 集成测试流程 本书案例代码集成架构 VII

15 实战案例教程 13.4 课后练习 第 14 章 创业思维训练 创业思维训练的价值 有利于 自身的长远发展 有利于高校开展 互联网 + 双创人才培养工作 创业思维训练基础 掌握定位理论, 选好创业项目 了解创新者的窘境, 思考创业项目的创新路径 理解精益创业, 试探创业项目的商业模式 提升用户体验, 推动创业项目成长 合理设置股权结构, 保证初创公司长治久安和不断成长 互联网 + 创业思维训练实践 总体安排 互联网 + 创业思维实验安排 互联网 + 创业思维实验举例 课后练习 VIII

16 第 0 章导读 在本章中, 我们开门见山地迈入移动开发的大门, 通过 豹考通 App 来介绍移动商务软件开发的知识模块与流程, 并从功能和界面的角度阐述 豹考通 从设 计到开发的全过程 在此基础上, 我们从高校教师教学的形式出发, 以项目案例驱 动的形式辅助与教学, 摒弃以往知识点讲解的教学形式, 提高学习效果 0.1 开发概述 App 是什么, 有些读者会有些了解, 简单地说 App 是对英文单词 Application 的简称, 即智能手机的应用程序, 无须连接 PC, 直接运行在手机上的应用 App 开发对于企业来说, 需要根据自身的具体发展情况和战略规划来权衡, 一个好的企 业,App 移动端开发在企业一定具有长期价值的一个重要组成部分 App 拥有几个特点 : (1)App 安装在移动设备上, 使用方便, 也便于营销 (2)App 融入了品牌元素, 是品牌的一个具体的体现, 用户可以享受到品牌的相关服务以及最新资讯 (3)App 与互联网相连, 随时更新数据, 提高用户体验 0.2 App 开发流程 一个完整的软件开发分为网页端与移动端 (App), 而移动端又包括 Android 端和 IOS 端, 使用的开发模式是移动应用开发常用的 MVC 开发模式 本书仅涉及 Android 端的开发 (1) 服务器框架搭建开发流程如图 0-1 所示 服务器端设计在一个移动项目设计中是很重要的部分, 如果说客户端负责为用 户展现数据, 那么服务器端可以说是为用户准备数据的 只有服务器端将用户所需要的数据准备完毕后, 客户端才有可能去展示 (2) 数据库设计与部署 对于移动 App 开发, 数据库的选择就显得至关重要, 因为数据存储结构 读取速度直接影响到用户体验, 所以尽量使用轻量级数据库, 这里我们使用的是 MySQL 数据库开发分为逻辑结构设计和物理结构设计 逻辑结构设计是对数据库实体 属性的确定,E-R 图确定以及数据库存储结构进行设计, 需要确定项目中所用到的字段并确定数据类型 物理结构设计就是在 MySQL 中创建相应的数据库表, 对数 据进行录入存储 最后需要将数据库与我们的后台服务器相连接 1

17 实战案例教程 (3) 服务器端实现 图 0-1 服务器端与数据库开发流程简图 服务器端的实现是在 MyEclipse8 中实现, 首先是要进行开发环境的配置 配置完成后, 在 MyEclipse8 中创建 豹考通 工程 (4) 客户端框架搭建 客户端开发流程简图如图 0-2 所示 图 0-2 客户端开发流程简图 图 0-3 图 0-4 图 0-5 和图 0-6 为开发时的主要工作界面 2

18 第 0 章导读 项目文档结构 菜单栏 工具栏 图 0-3 用 Android Studio 开发客户端主界面 Android 视图 Java 源代码 代码编辑区 清单文件 应用程序包名 程序执行入口, 主界面测试代码资源文件夹用于存放 xml 图片用于存放布局文件用于存放原生图片 适配不同屏幕 密度的照片 常量文件夹 颜色常量文件尺寸常量文件字符串常量文件样式常量文件存放 Gradle 脚本文件 图 0-4 Android 视图中项目文档结构及其含义 3

19 实战案例教程 项目名称 gradle 编译系统, 版本由 wrapper 指定 集成开发环境所需要的文件项目中的 app 模块存放 app 模块编译生成的内容存放 app 模块调用的第三方库存放 app 模块的源代码存放 app 模块代码的测试代码存放 app 模块核心代码和资源文件存放 app 模块代码的单元测试代码 app 模块 git 所使用的 ignore 文件 app 模块的配置文件 app 模块的 gradle 编译文件 app 模块的混淆规则文件存放项目编译生成的内容存放 wrapper 的 jar 包和配置文件项目对应的 git 使用的 ignore 文件项目的 gradle 编译文件 gradle 相关的全局属性设置 Linux 下的 gradle 打包可执行文件 Window 下的 gradle 打包可执行文件项目设置文件, 包含哪些模块本地属性文件, 配置 SDK/NDK 等项目设置文件, 包含哪些模块 项目所需要的一些外部包 图 0-5 Project 视图中项目文档结构及其含义 图 0-6 客户端页面跳转 (5) 界面及素材设计和界面跳转设计 对于界面设计与模块类实现, 可以分工同时进行 项目素材由美工组制作完成, 制作的标准需要按照 Android 开发图标要求制作, 在开发前, 项目负责人需要指定一个详细的设计文档, 指出需要的素材以及规格 而界面与界面跳转设计, 也需要通过讨论制定出想要的界面设计文档 其中需要注意的是, 界面跳转不宜过多, 除了必须跳转的界面之外, 可以在当前界面中实现的 功能尽量在当前页面实现, 这也是影响用户体验的重要指标之一 (6) 模块类的实现 根据项目的需求分析文档中列出的功能模块, 在项目中分别创建模块文件夹, 然后分别对功能模块进行设计与实现 (7) 网络数据读取接口 网络数据读取接口由服务器端提供, 包括网址和需要的参数, 客户端发送相应 4

20 第 0 章导读 的参数请求从服务器端获取编译结果, 最后由客户端呈现在用户眼前 网络数据接 口形式如下所示 (8) 编译打包及测试 移动应用编译打包 测试及发布上线的简易流程如图 0-7 所示 对于 Android 端应用, 需要在项目中打包生成 APK 文件 ; 编译打包完成后, 可 以在其他成员的手机上安装测试, 看有没有问题出现 如果有, 立即对程序进行调 试 ; 如果没有, 就可以在商店中发布上线了 (9) 发布上线 图 0-7 移动应用编译打包 测试及发布上线流程简图 相对于 IOS 发布过程来说,Android 应用的发布比较简单 ; 而 IOS 应用的发布 审核相对来说更为严格, 一些细节问题的出现都会让 Apple 公司拒绝, 如果是发布 在第三方商店, 如 91 助手, 审核相对顺利 0.3 案例介绍 豹考通 软件是一款面向全国高考学子和各大院校教师的软件 高考志愿填报对考生录取高校与专业, 乃至未来的人生道路非常关键 由于信息不对称, 考生填 报志愿时比较盲目 研发的 豹考通 将是一款新型 App, 服务考生和高校, 借助智 能手机帮助考生在填报志愿时掌握全面信息, 提供数据跟踪记录和深度分析, 供考生参考, 同时在高校与考生之间搭建一条新的交流途径 App 已经在各大 App 商店上架, 读者可以先下载使用 以下提供 91 助手 Android 端下载地址 根据市场和往年高考情况综合考虑, 豹考通 实现了以下 7 个功能 (1) 省控线查询 : 用户可以查询各省市高考省控线信息, 方便用户查找, 不需 要到网上去搜集信息 5

21 实战案例教程 (2) 投档线查询 : 用户可以查询全国各院校的投档线信息 (3) 生成投档线曲线图 : 根据用户的信息选择, 系统会为用户生成近几年的投档线和省控线的一个曲线图, 更加直观地显示分数的变化波动情况, 供用户参考 (4) 预测投档线 : 根据往年投档线情况, 采用系统的算法, 根据用户不同的选择, 预测今年各学校投档线情况 (5) 推荐学校 : 推荐学校可以为用户推荐一些感兴趣并且有机会能投档的院校, 帮助用户做出报考选择 (6) 生成预测推荐报告 : 报告是根据用户选择的参数进行生成, 报告的内容包括今年投档线的预测, 和推荐的所有有机会投档大学等名单, 为用户的最终选择提 供参考 (7) 关于我们 : 关于介绍参与开发 豹考通 软件的团队成员 豹考通 Android 客户端的主要界面见第 1 章体验部分 案例中访问服务器的部分, 均使用 作为我们的服务器地址, 所有 的程序 软件包及源代码都可以从此网站中获取, 当然读者也可以自己搭建本地服务器 ( 访问局域网 ) 图 0-8 为客户端服务器网络连接示意图 图 0-8 客户端服务器网络连接示意图 0.4 本书教学中所用到的学习案例代码 本书教学中所用到的案例代码, 各个案例包参见第 13 章集成测试中 简 介, 详细的内容请参见网络下载的程序包 此处从略 6

22 第 0 章导读 0.5 配置局域网运行和开发环境 客户端访问网络数据, 既可以通过域名 ( 或域名指向的 IP 地址 联网访问远程服务器获得数据, 又可以搭建临时局域网服务器通过 IP 地址来访问本 地服务器获取数据 本节将介绍如何搭建支持 App 客户端可访问的本地服务器和如何修改的客户端的请求 URL 链接 由于 豹考通 服务器端代码是由 JSP 编写, 如果需要将此服务器代码在本地 机运行, 则需用到的软件包括 Tomcat JDK 和 Mysql 为了便于教学和测试, 本书采用绿色运行环境 JTM-v1.1( 一键搭建运行 JavaEE 应用的工具 ) 为例, 将 豹考 通 Web 端部署在本地电脑并运行起来 将实验室的教师端电脑与学生端电脑互联在一个局域网内, 由教师或每组组长在电脑上将 豹考通 本地服务器运行起来 ( 启动方法参见第 1 章 ), 其他学生机进 行调用, 如图 0-9 网络拓扑结构所示, 不同的小组既可以连接本组搭建的服务器, 如小组 1 使用服务器 1, 小组 2 使用服务器 2 等, 也可以连接教师端的服务器, 只需将请求的 URL 地址修改为教师端或任何一台学生机服务器的 IP 地址即可, 如 ( 教师机 ), ( 小组 1 服务器 ) 完成上述 URL 地址修改 后, 将 豹考通 软件安装在学生机中 Android 模拟器上就可以访问本地搭建的服务器数据, 如果安装到 Android 手机中测试, 只需将 Android 手机连接到与服务器 同一局域网内就可以成功获取请求 ( 具体方法详见第一章 ) 教师机 ( 服务器 0) 小组 1 无线路由器 / 交换机 Android 手机 * 学生机 1( 服务器 1) 学生机 学生机 学生机 小组 2 学生机 1( 服务器 2) 学生机 学生机 学生机 小组 3 学生机 1( 服务器 3) 学生机 学生机 图 0-9 访问本地服务器网络连接拓扑图 ( 一 ) 学生机 如果实验室的机房网络拓扑图如图 0-10 所示, 由于各小组之间都被不同的无线 路由器分割成不同的局域网, 则整个访问规则服务器的只能是小组 1 使用服务器 1, 小组 2 使用服务器 2, 即本组只能访问本组局域网的服务器, 而教师机的模拟器也只能访问本机的 IP 地址 本地服务器的运行对交换机或路由器的设置上没有特殊要求, 也不需要联网, 只要按照默认配置使用 7

23 实战案例教程 模拟器 教师机 ( 服务器 0) 无线路由器 (WIFI01) 小组 1 局域网 1 学生机 1( 服务器 1) 学生机 学生机 学生机 本书内容简介 局域网 0 路由器 / 交换机 (WIFI0) 无线路由器 (WIFI02) 小组 2 局域网 2 学生机 1( 服务器 2) 学生机 学生机 学生机 Android 手机 无线路由器 (WIFIn) 小组 n 局域网 n 学生机 1( 服务器 n) 学生机 学生机 图 0-10 访问本地服务器网络连接拓扑图 ( 二 ) 学生机 本书第 1 章 App 实战应用体验, 运行 JVM 服务端和客户端, 体验 豹考通 项目 ; 第 2 章为项目需求分析 ; 第 3 章体验一个包含 Android 客户端 服务端 数 据库的开发微案例 ; 第 4 和第 5 章把 豹考通 划分为四个模块, 用本地临时数组分别进行实现 ; 第 6 章采用 TabHost 多页面切换, 将前述四个模块合并 第 7 章实 现学校录取分数线趋势图的绘制 ; 第 8 和第 9 章是本地 SQLite 数据库的管理与使用 ; 第 10 章使用 MySql 管理 App 的网络数据库 ; 第 11 章开发网络服务端管理程序 ; 第 12 章实现 Android 客户端与服务端的交互程序 ; 第 13 章介绍 App 集成测试的基本 方法 ; 第 14 章为 创业思维训练 0.7 课后练习 1. 移动 App 开发一般包括哪几个部分, 并简要描述每个部分的流程 2. 下载 豹考通 App, 思考其界面跳转设计的思路, 并提出自己的见解 3. 搭建本地服务器, 并在网页中试用 Web 版应用 8

24 第 4 章无对话框的单页面设计 通过第 3 章综合小案例的学习, 我们学习了从服务端 客户端 数据库交互的过程 从本章开始我们把 豹考通 教学版分模块逐章实现, 本章主要是用本地模 拟数据代替获取服务端数据实现 历年省控线查询 和 历年录取线查询 两个模 块, 如图 4-1 和图 4-2 所示 图 4-1 历年省控线查询 界面 4.1 本章案例实现流程 图 4-2 历年录取线查询 界面 在 省控线查询 模块中, 先是实现模块整体界面布局, 然后实现 4 个 Spinner 下拉列表, 接下来对 4 个列表监听实现省控线标题变化, 最后用 ListView 控件静态实现省控线列表, 如下图 4-3 所示 91

25 实战案例教程 图 4-3 省控线查询 模块实现的页面流程 在 历年录取线查询 模块中, 先是实现模块整体界面布局, 然后对 历年录 取线查询 筛选条件栏实现, 接下来对筛选条件栏监听实现历年录取线查询标题变化, 最后用 ListView 控件静态实现录取线列表和专业录取线, 如图 4-4 所示 92

26 第 4 章无对话框的单页面设计 图 4-4 历年录取线查询 模块实现的界面流程 4.2 历年省控线查询 模块实现 界面设计 省控线查询 模块整体采用线性布局, 布局内部结合 TextView( 文本显示框 ) Spinner( 列表 ) (HorizontalScrollView) 水平滚动条等组件组合实现, 具体请参考图

27 实战案例教程 整体采用线性布局 图 4-5 省控线查询 模块整体布局 TextView 水平滚动条内嵌入线性布局, 线性布局内嵌入由 TextView 和 Spinner 组成的 4 个线性布局 TextView 4 个 TextView 组成线性布局 ListView 列表 打开 strings.xml 文件, 在 resources 标签下定义资源变量, 代码如下 程序清单 :Code0401\app\src\main\res\values\strings.xml 1 <resources> 2 <string name="batch"> 批次 </string> 3 <string name="category"> 类别 </string> 4 <string name="year"> 年份 </string> 5 <string name="sourcearea"> 生源地 </string> 6 <string name="schoolarea"> 学校省份 </string> 7 <string name="controlline"> 省控线 </string> 8 <string name="controllinetitle"> 历年高考省控线查询 </string> 9 </resources> Spinner 列表显示框因为有边框, 所以需要自定义图片作为背景 在 drawable 文件夹下新建 border.xml 图片, 代码如下 程序清单 :Code0401\app\ src\main\res\drawable\border.xml 1 <shape xmlns:android=" 2 android:shape="rectangle"> 3 <solid android:color="# " /><!-- 无填充 --> 4 <corners android:radius="5dp"/> 5 <padding 94

28 第 4 章无对话框的单页面设计 6 android:bottom="2dp" 7 android:left="2dp" 8 android:right="2dp" 9 android:top="2dp" /> 10 <stroke 11 android:width="1dp" 12 android:color="#004400" /><!-- 边框 2dp, 颜色黑色 --> 13 </shape> 省控线查询 模块整体布局代码如下 程序清单 :Code0401\app\src\main\res\layout\activity_main.xml 1 <LinearLayout xmlns:android=" 2 xmlns:tools=" 3 android:layout_width="match_parent" 4 android:layout_height="match_parent" 5 android:background="#66ddccbb" 6 android:gravity="center_horizontal" 7 android:orientation="vertical"> 8 <TextView 9 android:layout_width="match_parent" 10 android:layout_height="wrap_content" 11 android:background="#ccbbaa" 12 android:gravity="center" 13 android:padding="5dp" 14 android:text="@string/controllinetitle" 15 android:textcolor="#000000" 16 android:textsize="20sp" /><!-- 标题文本 --> 17 <HorizontalScrollView 18 android:layout_width="wrap_content" 19 android:layout_height="wrap_content" 20 android:layout_gravity="center_horizontal" > 21 <LinearLayout 22 android:layout_width="wrap_content" 23 android:layout_height="wrap_content" 24 android:gravity="center_horizontal" 25 android:orientation="horizontal" 26 android:padding="5dp" > 27 <LinearLayout 28 android:layout_width="wrap_content" 29 android:layout_height="wrap_content" 30 android:gravity="center_horizontal" 31 android:orientation="vertical" 32 android:padding="5dp" > 33 <TextView 34 android:layout_width="wrap_content" 35 android:layout_height="wrap_content" 36 android:text="@string/year" 37 android:textsize="16sp" 95

29 实战案例教程 38 android:textcolor="#000000" /> 39 <Spinner android:layout_width="45dp" 42 android:layout_height="30dp" 43 /> 44 </LinearLayout> 45 <LinearLayout 46 android:layout_width="wrap_content" 47 android:layout_height="wrap_content" 48 android:gravity="center_horizontal" 49 android:orientation="vertical" 50 android:padding="5dp" > 51 <TextView 52 android:layout_width="wrap_content" 53 android:layout_height="wrap_content" android:textsize="16sp" 56 android:textcolor="#000000" /> 57 <Spinner android:layout_width="40dp" 60 android:layout_height="30dp" 61 /> 62 </LinearLayout> 63 <LinearLayout 64 android:layout_width="wrap_content" 65 android:layout_height="wrap_content" 66 android:gravity="center_horizontal" 67 android:orientation="vertical" 68 android:padding="5dp" > 69 <TextView 70 android:layout_width="wrap_content" 71 android:layout_height="wrap_content" android:textsize="16sp" 74 android:textcolor="#000000" /> 75 <Spinner android:layout_width="40dp" 78 android:layout_height="30dp" 79 /> 80 </LinearLayout> 81 <LinearLayout 82 android:layout_width="wrap_content" 83 android:layout_height="wrap_content" 84 android:gravity="center_horizontal" 85 android:orientation="vertical" 86 android:padding="5dp" > 96

30 第 4 章无对话框的单页面设计 87 <TextView 88 android:layout_width="wrap_content" 89 android:layout_height="wrap_content" 90 android:text="@string/category" 91 android:textsize="16sp" 92 android:textcolor="#000000" /> 93 <Spinner 94 android:id="@+id/categoryspinner" 95 android:layout_width="40dp" 96 android:layout_height="30dp" 97 android:background="@drawable/border" /> 98 </LinearLayout> 99 </LinearLayout> 100 </HorizontalScrollView><!-- 选择条件 --> 101 <TextView 102 android:id="@+id/controllinetitle" 103 android:layout_width="match_parent" 104 android:layout_height="wrap_content" 105 android:background="#ccbbaa" 106 android:gravity="center" 107 android:padding="10dp" 108 android:textcolor="#000000" 109 android:textsize="20sp" /><!-- 结果标题 --> 110 <LinearLayout 111 android:id="@+id/resulttitle" 112 android:layout_width="match_parent" 113 android:layout_height="wrap_content" 114 android:orientation="horizontal" > 115 <TextView 116 android:layout_width="0dp" 117 android:layout_height="wrap_content" 118 android:layout_marginleft="10dp" 119 android:layout_marginright="10dp" 120 android:layout_weight="1" 121 android:gravity="center" 122 android:text="@string/year" 123 android:textcolor="#000000" 124 android:textstyle="bold" /> 125 <TextView 126 android:layout_width="0dp" 127 android:layout_height="wrap_content" 128 android:layout_marginright="10dp" 129 android:layout_weight="1" 130 android:gravity="center" 131 android:text="@string/category" 132 android:textcolor="#000000" 133 android:textstyle="bold" /> 134 <TextView 135 android:layout_width="0dp" 97

31 实战案例教程 136 android:layout_height="wrap_content" 137 android:layout_marginright="10dp" 138 android:layout_weight="1" 139 android:gravity="center" android:textcolor="#000000" 142 android:textstyle="bold" /> 143 <TextView 144 android:layout_width="0dp" 145 android:layout_height="wrap_content" 146 android:layout_marginright="10dp" 147 android:layout_weight="1" 148 android:gravity="center" android:textcolor="#000000" 151 android:textstyle="bold italic" /> 152 </LinearLayout> 153 <!-- 列表项标题 --> 154 <ListView android:layout_width="match_parent" 157 android:layout_height="wrap_content" > 158 </ListView> 159 <!-- 结果列表 --> 160 </LinearLayout> Spinner 实现下拉列表选项 图 4-6 省控线查询 Spinner 列表 4 个下拉列表采用 Spinner 控件实现, 如图 4-6 所示, 每个 Spinner 列表需要自 己的布局 数据源和适配器 Adapter 在四个 Spinner 列表的布局中, 使用了三种布 局, 其中年份和生源地的布局一样, 因此创建三个布局文件即可 三种布局文件比较相似, 只是颜色不一样, 为了节省代码, 使用 style 样式表进行实现 三个布局文 件名分别是 spinner_item_batch.xml spinner_item_category.xml 和 spinner_item_ year.xml 首先, 在样式表 style.xml 文件中添加 spinner_itemstyle 样式, 代码如下 98

32 第 4 章无对话框的单页面设计 程序清单 :Code0402\app\src\main\java\cn\jxufe\iet\code0402\ControlLineActivity.java 1 /* 显示省控线列表 */ 2 GetService getservice=new GetService(); controllinelist= getservice.setcontrollinelist();// 为 controllinelist 集合 3 添加集合内容 4 ControlLineAdapter controllineadapter=new ControlLineAdapter 5 (this,controllinelist); 6 controllinelistview.setadapter(controllineadapter); 7 // 关联 ListView 控件显示列表 4.3 历年录取线查询 模块实现 界面设计 历年省控线查询 模块整体采用线性布局, 布局内部结合 TextView( 文本显 示框 ) Spinner( 列表 ) HorizontalScrollView( 水平滚动条 ) Button( 按钮 ) 等组 件组合实现, 具体请参考图 4-9 图 4-9 省控线查询 模块整体布局 107

33 实战案例教程 打开 strings.xml 文件, 在 resources 标签下定义资源变量, 代码如下 程序清单 :Code0403\app\src\main\res\values\strings.xml 1 <resources> 2 <string name="chooseschool"> 选择学校 </string> 3 <string name="enrollscoretitle"> 历年录取线查询 </string> 4 <string name="showmajor"> 显示专业 </string> 5 <string name="major"> 专业名称 </string> 6 <string name="yes"> 是 </string> 7 <string name="no"> 否 </string> 8 <string name="startyear"> 起始年份 </string> 9 <string name="enterline"> 投档线 </string> 10 <string name="enterlinerank"> 投档排名 </string> 11 <string name="max_score"> 最高分 </string> 12 <string name="average_score"> 平均分 </string> 13 <string name="averagetrend"> 历年分数与省控线差值趋势图 </string> 14 <string name="batch"> 批次 </string> 15 <string name="category"> 类别 </string> 16 <string name="year"> 年份 </string> 17 <string name="sourcearea"> 生源地 </string> 18 <string name="schoolarea"> 学校省份 </string> 19 <string name="search"> 查询 </string> 20 </resources> Spinner 列表显示框因为有边框, 所以需要自定义图片作为背景 在 drawable 文件夹下新建 border.xml 图片, 代码如下 程序清单 :Code0403\app\src\main\res\drawable\border.xml 1 <shape xmlns:android=" 2 android:shape="rectangle"> 3 <solid android:color="# " /><!-- 无填充 --> 4 <corners android:radius="5dp"/> 5 <padding 6 android:bottom="2dp" 7 android:left="2dp" 8 android:right="2dp" 9 android:top="2dp" /> 10 <stroke 11 android:width="1dp" 12 android:color="#004400" /><!-- 边框 1dp, 颜色黑色 --> 13 </shape> 查询按钮和历年分数与省控线差值按钮设置背景图片, 因为按钮按下和抬起背 景图片是两种状态, 于是创建 title_btn.xml 背景图片, 采用 selector 标签设置各种状 态对应显示的图片, 状态显示图片分别为 pressed.xml 和 unpressed.xml pressed.xml 自定义图片代码如下 108

34 第 4 章无对话框的单页面设计 程序清单 :Code0403\app\ src\main\res\drawable\pressed.xml <shape xmlns:android=" 1 android:shape="rectangle" > 2 <corners android:radius="10dp"/> 3 <solid android:color="#ffff00"/><!-- 填充的颜色 --> 4 <stroke android:color="#666600" 5 android:width="2dp"/><!-- 边框的颜色 --> 6 </shape> unpressed.xml 自定义图片代码如下 程序清单 :Code0403\app\ src\main\res\drawable\unpressed.xml <shape xmlns:android=" 1 android:shape="rectangle" > 2 <corners android:radius="10dp"/> 3 <solid android:color="#66aaaa00"/><!-- 填充的颜色 --> 4 <stroke android:color="#666600" 5 android:width="1dp" 6 android:dashwidth="2dp" 7 android:dashgap="3dp"/><!-- 边框的颜色 --> 8 </shape> title_btn.xml 自定义图片代码如下 程序清单 :Code0403\app\src\main\res\drawable\title_btn.xml 1 <selector xmlns:android=" > <item android:state_pressed="true" 2 android:drawable="@drawable/pressed"></item> <item android:state_selected="true" 3 android:drawable="@drawable/pressed"></item> <item android:state_pressed="false" 4 android:drawable="@drawable/unpressed"></item> 5 </selector> 历年录取线查询 模块整体布局代码如下 程序清单 :Code0403\app\src\main\res\layout\activity_main.xml 1 <LinearLayout xmlns:android=" 2 xmlns:tools=" 3 android:layout_width="match_parent" 4 android:layout_height="match_parent" 5 android:background="#66ddccbb" 6 android:orientation="vertical" 7 tools:context="cn.jxufe.iet.code0404.enrollscoreactivity"> 8 <TextView 9 android:layout_width="match_parent" 10 android:layout_height="wrap_content" 11 android:background="#ccbbaa" 12 android:gravity="center" 13 android:padding="5dp" 14 android:text="@string/enrollscoretitle" 109

35 第 4 章无对话框的单页面设计 事件监听器 图 4-11 录取线查询 事件监听 历年录取线筛选条件栏实现 5 个 Spinner 列表完成后, 点击查询按钮后, 历年录取线标题栏标题还不能根据选择的信息进行切换, 学校 Spinner 列表还没实现, 如图 4-11 所示 学校列表在选择完学校所在省份后, 更新学校列表, 所以需要借助 事件监听器进行实现 为了实现学校名称下拉列表随着选择学校省份变化和历年录取线标题栏灵活性变化, 分三步进行实现 : (1) 创建 getschool 方法, 在 getschool 方法中实现学校列表 ; (2) 在主类 EnrollScoreActivity 中定义 MyItemSelectedListener 内部监听类对 6 个 Spinner 监听, 同时点击学校省份后调用 getschool 方法实现学校列表 ; (3) 对 6 个 Spinner 列表进行注册 第一步, 在实现 getshool 方法前, 需要实现 School 实例类, 方便封装学校名称信息代码如下 程序清单 :Code0403\app\src\main\java\ cn\jxufe\iet\code0403\bean\school.java 1 public class School implements Serializable {// 学校封装类 2 private static final long serialversionuid = L; 3 public static final String SCHOOL_NAME="schoolName"; 4 public static final String SCHOOL_CODE="schoolCode"; 5 public static final String SCHOOL_ID="schoolId"; 6 private int schoolid;// 学校 Id 7 private String schoolname;// 学校名称 8 private int schoolcode;// 学校编号 9 private boolean is211;// 是否 211 院校 10 private boolean is985;// 是否 985 院校 11 private boolean isministry;// 是否直属院校 12 private String areaname;// 学校所在地省份 13 public String getschoolname() { 14 return schoolname; 15 } 16 public void setschoolname(string schoolname) { 17 this.schoolname = schoolname; 18 } 19 public int getschoolcode() { 20 return schoolcode; 21 } 22 public void setschoolcode(int schoolcode) { 119

36 第 4 章无对话框的单页面设计 合 8 } 9 } 10 ArrayAdapter<String> schooladapter = new ArrayAdapter<String>( 11 EnrollScoreActivity.this, R.layout.spinner_item_year, schools); 12 schoolspinner.setadapter(schooladapter); 13 } 第二步, 定义 MyItemSelectedListener 内部监听类代码如下 程序清单 :Code0403\app\src\main\java\ cn\jxufe\iet\code0403\enrollscoreactivity.java 1 private class MyItemSelectedListener implements AdapterView.OnItemSelectedListener { 3 public void onitemselected(adapterview<?> parent, View view, 4 int position, long id) { 5 switch (parent.getid()) { 6 case R.id.schoolAreaSpinner:// 如果选择学校所在地 7 schoolareaid = position; 8 getschool(provinces.get(schoolareaid)); 9 // 当省份变化时, 对应显示的学校都会随之变化 10 break; 11 case R.id.areaSpinner:// 如果是选择生源地 12 sourceareaid = position; 13 break; 14 case R.id.categorySpinner:// 如果是选择文理科 15 categoryid = position;// 序号从 0 开始 16 break; 17 case R.id.batchSpinner:// 如果是选择批次 18 batchid = position; 19 break; 20 case R.id.schoolSpinner:// 如果是选择学校 21 schoolid = position;// 获取学校名称 22 break; 23 case R.id.yearSpinner: 24 yearid = position; 25 break; 26 default: 27 break; 28 } 29 } 31 public void onnothingselected(adapterview<?> parent) { 32 } 33 } 第三步, 定义完 MyItemSelectedListener 事件监听内部类后, 需要对 6 个 Spinner 控件监听才能达到监听的效果, 代码如下 121

37 实战案例教程 程序清单 :Code0403\app\src\main\java\cn\jxufe\iet\code0403\EnrollScoreActivity.java MyItemSelectedListener myitemselectedlistener = new 1 MyItemSelectedListener();// 实例化事件监听器 2 schoolareaspinner.setonitemselectedlistener(myitemselectedlistener); 3 schoolspinner.setonitemselectedlistener(myitemselectedlistener); 4 categoryspinner.setonitemselectedlistener(myitemselectedlistener); 5 batchspinner.setonitemselectedlistener(myitemselectedlistener); 6 yearspinner.setonitemselectedlistener(myitemselectedlistener); 7 sourceareaspinner.setonitemselectedlistener(myitemselectedlistener); 实现完事件监听器对 6 个 Spinner 监听记录选择的信息, 但是点击 查询 按钮还是不能实现录取线标题栏信息改变, 这时需要对 查询 按钮采用匿名内部类 监听方法对实现 对 查询 按钮监听, 根据检查单选按钮的选择情况显示信息, 具体代码如下 程序清单 :Code0403\app\src\main\java\cn\jxufe\iet\code0403\EnrollScoreActivity.java 1 searchbtn.setonclicklistener(new View.OnClickListener() { 3 public void onclick(view v) { 4 if (issearchbymajor.ischecked()) {// 查询学校各专业的录取线 5 showmajorrecruitsresult(); 6 } else {// 查询学校的录取线 7 showschoolrecruits(); 8 } 9 } 10 }); 根据上面代码, 我们可以发现 showmajorrecruitsresult 方法和 showschoolrecruits 方法没有实现,showMajorRecruitsResult 方法为显示选择录取线 结果,showSchoolRecruits 显示学校录取线结果, 具体如何显示代码如下 showmajorrecruitsresult 方法代码 程序清单 :Code0403\app\src\main\java\cn\jxufe\iet\code0403\EnrollScoreActivity.java 1 public void showmajorrecruitsresult() {// 显示专业的录取线信息 2 trendbtn.setvisibility(view.gone);// 生成趋势图按钮不可见 schoolrecruitresultlayout.setvisibility(view.gone);// 隐藏学校录取线信 3 息标题 majorrecruitresultlayout.setvisibility(view.visible);// 显示专业录取线 4 信息标题 titleview.settext(html.fromhtml("<font color=blue><b>" + 5 schools.get(schoolid) 6 + "</b></font><font color=red><b>" + years[yearid] 7 + "</b></font> 年在 <br/><font color=blue><b>" 8 + provinces.get(sourceareaid) + "</b></font> 地区各专业录取线 ")); 9 } showschoolrecruits 方法代码 122

38 第 4 章无对话框的单页面设计 程序清单 :Code0403\app\src\main\java\cn\jxufe\iet\code0403\EnrollScoreActivity.java 1 public void showschoolrecruits() {// 显示学校的录取线信息 titleview.settext(html.fromhtml("<font color=blue><b>" + 2 schools.get(schoolid) 3 + "</b></font><font color=red><b>" 4 + batches[batchid] 5 + "</b></font><font color=blue><b>" 6 + categories[categoryid] 7 + "</b></font> 类 <br/> 在 <font color=red><b>" + provinces.get(sourceareaid) + "</b></font> 地区历年录取线 "));// 8 标题内容 schoolrecruitresultlayout.setvisibility(view.visible);// 显示学校录取线 9 各项标题 majorrecruitresultlayout.setvisibility(view.gone);// 专业录取信息标题隐 10 藏 11 trendbtn.setvisibility(view.visible);// 生成趋势图按钮可见 12 } ListView 列表 图 4-12 学校录取线列表 图 4-13 专业分数线列表 录取线列表包含两部分 : 录取线列表和专业录取线列表, 如图 4-12 和图 4-13 所示 实现 ListView 列表需要四步进行完成 :(1) 分别实现学校录取线列表布局和专业分数线列表 ;(2) 使用临时集合数据源代替从服务端获取的数据 ;(3) 自定义每个列 表的适配器类, 并实现其内部方法 ;(4) 将适配器和列表进行关联 第一步, 实现学校录取线列表布局, 在 Layout 文件夹下新建 list_item_school _recruit.xml 列表布局代码如下 123

39 实战案例教程 程序清单 :Code0404\app\src\main\java\ cn\jxufe\iet\code0404\enrollscoreactivity.java 1 GetService getservice=new GetService(); 2 schoolrecruits=getservice.setschoolrecruits(); School_recruitAdapter school_recruitadapter=new 3 School_recruitAdapter(EnrollScoreActivity.this,schoolRecruits); 4 enrollresultview.setadapter(school_recruitadapter); 在 showmajorrecruitsresult 方法中实例化 GetService 对象获取省控线数据集合, 并实例化 Major_recruitAdapter 对象, 传入数据源, 关联 ListView 控件显示列表, 具 体代码如下 程序清单 :Code0404\app\src\main\java\cn\jxufe\iet\code0404\EnrollScoreActivity.java 1 GetService getservice=new GetService();// 实例化从服务端获取数据类 2 majorrecruits=getservice.setmajorrecruits();// 获取专业信息数据 Major_recruitAdapter major_recruitadapter=new 3 Major_recruitAdapter(EnrollScoreActivity.this,majorRecruits); 4 enrollresultview.setadapter(major_recruitadapter); 4.4 课后练习 1. Spinner 列表尝试另外一种实现方式, 在 XML 文件中通过 <string-array> 进行 指定, 然后为 Spinner 控件指定 android:entries 属性 2. 在 历年录取线查询页面 的基础上添加 2015 年的数据, 并将它们显示出 来 3. 将 历年录取线查询页面 中的 ListView 的奇数行的背景颜色改为黑色, 字体颜色改为白色 4. 请设计并实现如图 4-14 所示界面效果 界面要求 : a. 最上面为一张图片控件, 采用提供图片资源显示 中间三行采用表格布局 进行显示, 其中 TextView 字体采用 22sp, 第一行我 Spinner 控件, 第二 行和第三行第二类为 RadioButton 最下面为按钮, 背景颜色为 #8080C0, 宽度 200dp, 高度 40dp b. Spinner 控件设置背景编辑框, 使用 shape 标签自定义图片进行实现 c. 使用省份数组显示 Spinner 列表, 如图 4-15(b) 所示 134

40 第 4 章无对话框的单页面设计 (a) 图 4-14 习题 4 效果图 (b) 135

41 第 5 章含对话框单页面界面设计 我们把 豹考通 教学版分模块逐章实现过程中, 在第 4 章中已经用本地模拟数 据代替获取服务端数据的实现 历年省控线查询 和 历年录取线查询 两个模块, 本章主要用本地模拟数据临时代替服务端数据实现 报考咨询 模块, 个人基本 信息 模块没有与服务端进行数据交互, 本地实现即可, 如图 5-1 和图 5-2 所示 图 5-1 报考咨询 界面 图 5-2 个人基本信息 界面 5.1 本章案例实现流程 在 报考咨询 模块中, 先是实现模块整体界面布局, 然后实现问题列表, 对问题列表长按进行事件监听, 长按能够弹出问题回复对话框, 如图 5-3 所示 137

42 实战案例教程 图 5-3 报考咨询 模块实现流程图 在 个人基本信息 模块中, 先是实现模块整体界面布局, 然后通过 SharedPreferences 实现个人信息存储, 接下来实现 个人信息填写对话框, 如下图 5-4 所示 138

43 第 5 章含对话框单页面界面设计 1. 实现模块整体界面整体布局 5.2 报考咨询 模块实现 2. 实现 SharedPreferences 个人信息存储 3. 实现个人信息填写编辑框 图 5-4 历年录取线查询 模块实现流程图 界面设计 报考咨询 模块整体采用线性布局, 布局内部结合 TextView( 文本显示框 ) EditText( 编辑框 ) Button( 按钮 ) ListView( 列表 ) 等组件组合实现, 具体请参考图

44 实战案例教程 图 5-5 省控线查询 模块整体布局 打开 strings.xml 文件, 在 resources 标签下定义资源变量, 代码如下 程序清单 :Code0501\app\ src\main\res\values\strings.xml 1 <resources> 2 <string name="app_name">code0501</string> 3 <string name="consult"> 报考咨询 </string> 4 <string name="submitquestion"> 提问 </string> 5 <string name="inputhint"> 请输入你想咨询的问题 </string> 6 <string name="keywordhint"> 请输入搜索关键字 </string> 7 <string name="save"> 保存 </string> 8 <string name="selfinfotitle"> 个人基本信息 </string> 9 <string name="score"> 高考成绩 </string> 10 <string name="inputscore"> 输入高考成绩 </string> 11 <string name="rank"> 高考排名 </string> 12 <string name="targetarea"> 意向省份 </string> 13 <string name="recruitbatch"> 录取批次 </string> 14 <string name="studentcategory"> 考试类别 </string> 15 <string name="search"> 查询 </string> 16 </resources> 140

45 第 5 章含对话框单页面界面设计 5.4 课后练习 1. 为 个人基本信息界面 的编辑按钮添加样式, 使之与 报考咨询界面 的 按钮一致 2. 尝试编写一个登录的小案例, 该页面应该有一个登录按钮和两个输入框 当输入了账号 admin, 密码 123 时即可弹出一个 Toast 提示 登录成功, 若账号或密 码输入错误则 Toast 显示 登录失败 登陆成功后需要将账号和密码存储在 SharedPreferences 中, 在用户第二次打开案例时, 程序会从 SharedPreferences 中取出账号和密码并将它们自动填写在输入框中 3. 请设计并实现如图 5-15 所示界面效果 界面要求 : a) 界面中包含两个控件, 文本显示框 TextView 和列表 ListView TextView 用于显示标题信息, 标题内容为 : 南昌景点介绍, 文字大小 为 :24sp, 背景颜色为 :#ccbbaa, 对齐方式为居中, 边距为 10dp b) ListView 显示所有景点信息, 一项代表一个景点, 每个景点包含三部 分信息, 景点图片, 景点名称, 景点简介 ListView 的背景颜色为 #aabbcc, 项与项之间的分割线大小为 2dp, 颜色为灰色 (#aaaaaa) c) 在 ListView 的每一项中, 包含三个控件 : 一个 ImageView 用于显示景 点图片, 两个 TextView 分别显示景点名称 景点简介 其中 ImageView 大小为 :100*75, 景点名称文字大小为 :20sp, 景点简介文字大小为 : 12sp, 颜色为 :#0000ee, 单行显示, 当内容超过宽度时, 省略后面的 文字, 以点代替 功能要求 : 长按列表中的某一项, 弹出如图所示删除提示对话框, 如果用户选择确定, 则 删除该项信息, 并及时更新列表 ; 如果用户选择取消, 则不做删除操作 163

46 第 6 章多页面切换效果设计 图 6-14 FrameLayout 布局效果演示 在 豹考通 教学版中, 各个页面的切换实质是让选项卡中所选中的页面覆盖当前页面 此时, 我们发现在 activity_main.xml 的视图界面显示如下 : 图 6-15 activity_main 视图界面 注意 : 如果要使用 TabHost, 必须在布局文件中给 TabWidget 定义名为 tabs 的 id 除此之外, 还需要给给布局中的一个 FrameLayout 定义一个名为 tabcontent 的 id 这两个 id 是 android 系统自带的, 如果不为这两个元素添加系统自带的 id, 选项卡就无法正常使用 173

47 第 6 章多页面切换效果设计 中通常用来存放一些写好的控件特效 在 豹考通 教学版的选项卡模块中, 在 drawable 文件夹里使用了 3 个 xml 文件来编写选项卡的特效, 他们分别是 tab.xml( 和 layout 文件夹下的布局文件是重名的, 事实上这个名称可以随意设置 ) tab_selected.xml tab_unselected.xml 其中,tab_selected.xml 表示的是当选项卡被选中时会呈现出的样式,tab_ unselected.xml 表示的是当选项卡未被选中时呈现的样式 tab.xml 文件整合了前两 个文件, 用于设置当选项卡处于不同状态下应该加载哪种布局文件 我们只需要在 res-drawable 文件夹中分别建立以下三个布局文件即可 : 选项卡状态设置文件 :Code0601\app\src\main\res\drawable\tab.xml 1 <?xml version="1.0" encoding="utf-8"?> <!--selector 标签经常用来操作控件的背景 --!> 2 <selector xmlns:android=" > <!-- 当控件被按下时, 将控件样式设置为 tab_selected.xml--!> 3 <item android:state_pressed="true" android:drawable="@drawable/tab_selected"></item> <!-- 当控件被选中时, 将控件样式设置为 tab_selected.xml--!> 4 <item android:state_selected="true" android:drawable="@drawable/tab_selected"></item> <!-- 当控件未被按下时, 将控件样式设置为 tab_unselected.xml--!> 5 <item android:state_pressed="false" android:drawable="@drawable/tab_unselected"></item> <!-- 当控件未被选中时, 将控件样式设置为 tab_unselected.xml--!> 6 <item android:state_selected="false" android:drawable="@drawable/tab_unselected"></item> 7 </selector> 选项卡样式 :Code0601\app\src\main\res\drawable\tab_selected.xml 1 <?xml version="1.0" encoding="utf-8"?> 2 <shape xmlns:android=" 3 android:shape="rectangle" ><!-- 设置控件为矩形 --!> 4 <corners android:radius="5dp"/><!-- 设置控件的圆角弧度 --!> 5 <solid android:color="#aaaaaa"/><!-- 填充的颜色 --> 6 </shape> 选项卡未被选中 / 按下时的样式 : Code0601\app\src\main\res\drawable\tab_unselected.xml 1 <?xml version="1.0" encoding="utf-8"?> 2 <shape xmlns:android=" 3 android:shape="rectangle" > 4 <corners android:radius="5dp"/> 5 <solid android:color="#000000"/><!-- 填充的颜色 --> 6 <gradient <!-- 用于设置颜色的过渡 --!> 175

48 实战案例教程 7 android:startcolor="#aa444444" 8 android:centercolor="#aa666666" 9 android:endcolor="#aa444444" 10 android:type="linear"/> 11 </shape> 当我们将这几个 xml 文件编写完后, 可以发现在 layout/tab.xml 布局文件中已经 不再报错了 初始化选项卡设计 我们已经在布局文件中完成了各个控件的插入, 但此时还并不能看到选项卡的 效果, 因为我们并没有为选项卡加载内容, 接下来我们进入 MainActivity.java 文件, 来正式为选项卡设置内容 首先, 我们需要为每个选项卡设置标签 tag 和标题 title tag 指代的是选项卡每 个子项的名字,title 指代的是选项卡每个子项的内容, 在 豹考通 教学版中的选 项卡有四个选项, 那么我们就分别为 tag 和 title 建立一个数组来存储信息, 同时我们要初始化选项卡控件 代码如下 : 页面主程序 java 文件 :Code0601\app\src\main\java\cn\jxufe\iet\MainActivity.java 1 2 public class MainActivity extends Activity { <!-- 初始化选项卡控件 --!> 3 private TabHost mtabhost; <!-- 选项卡的标签 --!> 4 private String[] tags=new String[]{"page1","page2","page3","page4"}; <!-- 选项卡的内容 --!> 5 private String[] titles=new String[]{" 第一页 "," 第二页 "," 第三页 "," 第四页 "}; 6 } 上述基本准备工作完成后, 我们需要了解一个新的概念 Fragment Fragment 是 Android3.0 引入的新 API, 译为 片段, 我们可以将它理解为 Activity 中的 片段或者子模块 Fragment 必须被嵌入到 Activity 中使用, 在同一个 Activity 中可以包含多个 Fragment 在 豹考通 教学版中, 我们便使用到了 TabHost+Fragment 的技术, 用户通过 单击选项卡完成页面的切换, 在切换过程中整个 Activity 并没有发生跳转, 实际上发生变化的仅仅只是 Activity 中的 Fragment 部分 如下图所示 : 176

49 第 6 章多页面切换效果设计 切换选项卡后 发生变化的只有 屏幕中间的 省控线录取线 fragment 部分省控线录取线 图 6-17 选项卡效果展示 如果希望使用 fragment 来完成不同选项卡之间内容的跳转, 我们需要首先让 MainActivity 集成 FragmentActivity, 并且声明 oncreate() 方法, 代码如下 : 页面主程序 java 文件 :Code0601\app\src\main\java\cn\jxufe\iet\MainActivity.java 1 public class MainActivity extends FragmentActivity { <!-- 初始化选项卡控件 --!> 此处要继承 2 private TabHost mtabhost; FragmentActivity 3 <!-- 选项卡的标记 --!> 4 private String[] tags=new String[]{"page1","page2","page3","page4"}; <!-- 选项卡的内容 --!> 5 private String[] titles=new String[]{" 第一页 "," 第二页 "," 第三页 "," 第四页 "}; 6 <!--oncreate() 方法 --!> 7 protected void oncreate(bundle savedinstancestate) { 8 super.oncreate(savedinstancestate); 9 } 10 } 接下来, 我们为每个选项卡中填充内容, 代码如下 : 页面主程序 java 文件 :Code0601\app\src\main\java\cn\jxufe\iet\MainActivity.java 1 public class MainActivity extends FragmentActivity { 2 private TabHost mtabhost; 3 private String[] tags=new String[]{"page1","page2","page3","page4"}; 4 private String[] titles=new String[]{" 第一页 "," 第二页 "," 第三页 "," 第四页 "}; 5 protected void oncreate(bundle savedinstancestate) { 6 super.oncreate(savedinstancestate); 177

50 7.1 本章案例流程 图 7-1 引用自定义 View (Code0701) 第 7 章绘制趋势图 图 7-2 绘制坐标轴 (Code0702) 图 7-3 根据模拟数据绘制趋势图 (Code0703) 图 7-4 根据录取线页面数据绘制趋势图 (Code0704) 225

51 实战案例教程 7.2 绘图功能了解 为了让用户在填报院校, 评估院校时有更加清晰的思路, 豹考通 App 特地提 供了一项分数线趋势图的功能, 趋势图模块可以将院校历年的省控线和录取线的差 值展示在坐标轴上并连线, 以便让用户清晰地了解到近几年分数线的变动情况, 用户可以根据图形呈上升趋势或者下降趋势来判断自己填报的合理性 趋势图查询功 能如下图所示. 图 7-5 查询完录取线后, 点击图 7-6 进入趋势图页面 历年分数与省控线差值趋势图 按钮 在本章提供的源码中,Code0701 对应第 7.4 节教学内容,Code0702 对应第 7.5 节的教学内容,Code0703 对应第 7.6 节的教学内容,Code0704 对应第 7.7 节的教学 内容 226

52 第 8 章使用工具管理 SQLite 数据库 通过前面几章的学习, 我们知道如何从数组中获取数据并将数据显示到相应的控件中去 从本章开始我们将引入本地数据库 SQLite, 将学校表 School 和地区表 Area 中的数据保存在 SQLite 中, 然后从 SQLite 取值并显示到控件中 本章主要是 告诉大家如何使用工具管理 SQLite 数据库, 其创建的数据库表如图 8-1 所示, 再将准备好的学校数据和地区数据导入到 SQLite 数据中, 具体数据如表 8-1 和表 8-2 所示 图 8-1 数据库表 表 8-1 地区表 (area) 全部数据 areaid( 省市编码 ) areaname( 省市名称 ) 3 上海 10 浙江 13 江西 34 北京 表 8-2 学校表 (school) 部分数据 schoolid schoolname schoolcode areaid is985 is211 isministry 5 北京大学 清华大学 浙江大学 复旦大学 上海中医药大学 同济大学 中国人民大学 北京理工大学 上海大学 中央财经大学

53 第 8 章使用工具管理 SQLite 数据库 8.1 了解 SQLite SQLite 是一款轻量级 跨平台的关系型数据库 既然号称关系型数据库, 那它 就支持多数 SQL92 标准 ( 比如视图 触发器 事务等 ), 这里我们就不一一细说了 它的运算速度非常快, 并且占用资源很少, 通常只需要几百 KB 的内存就可以了, 因而特别适合在移动设备上使用 Android 系统是内置了数据库的,SQLite 是 D.Richard Hipp 用 C 语言编写的开源嵌入式数据库引擎 它支持大多数的 SQL92 标 准, 并且可以在所有主要的操作系统上运行 SQLite 由以下几个部分组成 :SQL 编译器 内核 后端以及附件 SQLite 通过 利用虚拟机和虚拟数据库引擎 (VDBE), 使调试 修改和扩展 SQLite 的内核变得更加 方便 所有 SQL 语句都被编译成易读的 可以在 SQLite 虚拟机中执行的程序集 SQLite 支持 NULL INTEGER REAL TEXT 和 BLOB 数据类型, 分别代表空值 整型 值 浮点值 字符串文本 二进制对象 SQLite 不仅支持标准的 SQL 语法, 还遵循 了数据库的 ACID 事务, 所以只要你以前使用过其他的关系型数据库, 就可以很快地上手 SQLite 而 SQLite 又比一般的数据库要简单地多, 它甚至不用设置用户名和 密码就可以使用 Android 正是把这个功能极为强大的数据库嵌入到了系统当中, 使得本地持久化的功能有了一次质的飞跃 SQLite 系统架构如图 8-2 所示 图 8-2 SQLite 系统架构 8.2 SQLite 优点 轻量级 : 先说它的第一个特色 : 轻量级 想必 SQLite 的作者很看重这个特性, 连它的 Logo 都是用的 羽毛, 来显摆它的轻飘飘 SQLite 和 C/S 模式的数据库 287

54 第 9 章 SQLite 数据库的操作模块设计 9.1 本章案例流程 上章我们讲到如何使用工具 (Navicat for SQLite) 管理 SQLite 数据库, 并创 建好了本地数据库 bkt.sqlite 本章将讲解如何使用代码操作 SQLite 数据库, 同时将上一章创建好的数据库导入到项目中并成功运行 使用代码操作 SQLite 数据库有两种方式 : (1) 直接用代码创建数据库及表, 并向表里添加数据, 或是执行其他的 SQL 操作 (2) 将外部 SQLite 数据库导入到项目中, 然后使用代码读取该 SQLite 数据库, 并执行相应的 SQL 操作 图 9-1 Code0901 代码创建 SQLite 数据库 图 9-2 引入外部 SQLite 数据库 305

55 实战案例教程 9.2 用 SQL 代码创建数据库及表 项目结构 案例实现 图 9-3 Code0901 项目结构 首先我们直接通过一个小案例来看下第一种方式该怎么去实现对 SQLite 的操 作, 有关 SQLite 的属性和一些具体的用法稍后便会讲到 这里我们要在 Android Studio 中使用代码创建一个名为 bkt_local.db 的本地数据库, 然后在这个数据库中新建一张地区表 area 和学校表 school 建表语句不会陌生吧? 还是用基本的 SQL 语句创建,area 表的建表语句如下所示 : create table area(areaid integer primary key,areaname text); school 表的建表语句如下所示 : 1 create table school( 2 schoolid integer primary key, 3 schoolname text, 4 schoolcode integer, 5 areaid integer, 6 is985 integer, 7 is211 integer, 8 isministry integer); 然后我们怎么把以上建表语句整合在代码中并执行呢? 我们先新建一个类 306

56 第 9 章 SQLite 数据库的操作模块设计 java class, 如图 9-4 所示 图 9-4 新建 java class 再新建 MyDatabaseHelper 类继承自 SQLiteOpenHelper 类, 如图 9-5 所示 图 9-5 新建 MyDatabaseHelper 类 打开 MyDatabaseHelper 类, 将建表语句以字符串的形式写进类中, 代码如下 307

57 实战案例教程 程序清单 :Code0901\app\src\main\java\cn\jxufe\iet\code0901\MyDatabaseHelper.java 1 public class MyDatabaseHelper extends SQLiteOpenHelper { 2 // 定义创建地区 area 表的 sql 语句 3 public static final String CREATE_AREA="create table area(" 4 +"areaid integer primary key," 5 +"areaname)"; 6 // 定义创建学校 school 表的 sql 语句 7 public static final String CREATE_SCHOOL="create table school(" 8 +"schoolid integer primary key," 9 +"schoolname text," 10 +"schoolcode integer," 11 +"areaid integer," 12 +"is985 integer," 13 +"is211 integer," 14 +"isministry integer)"; 15 private Context mcontext; 16 public MyDatabaseHelper(Context context, String name, 17 SQLiteDatabase.CursorFactory factory, int version){ 18 super(context,name,factory,version); 19 mcontext = context; 20 }; 21 public void oncreate(sqlitedatabase db){ 22 db.execsql(create_area); 23 db.execsql(create_school); 可以看到我们把两张表的建表语句都定义成了字符串常量, 然后在 oncreate() 方法中又调用了 execsql 方法执行两条语句, 这样可以保证在创建数据库的同时两 张表也创建成功了 接下来我们打开 activity_main.xml 文件, 修改布局文件如下 所示 : 程序清单 :Code0901\app\src\main\res\layout \activity_main.xml 1 <LinearLayout 2 xmlns:android=" 3 xmlns:tools=" 4 android:id="@+id/activity_main" 5 android:layout_width="match_parent" 6 android:layout_height="match_parent" 7 android:orientation="vertical"> 8 <LinearLayout 9 android:layout_width="wrap_content" 10 android:layout_height="wrap_content" 11 android:gravity="center_horizontal" 12 android:orientation="horizontal" 13 android:padding="5dp" 14 android:layout_gravity="center"> 15 <LinearLayout 16 android:layout_width="wrap_content" 17 android:layout_height="wrap_content" 18 android:gravity="center_horizontal" 308

58 第 11 章 App 网络服务器管理程序设计 11.1 服务器开发背景知识 工欲善其事必先利其器, 我们学习服务端的开发, 就必须先要熟悉掌握开发的 工具 现在比较流行的开发工具有 Eclipse MyEclipse 和 WebBuilde 等 在这里, 推 荐大家使用 MyEclipse 软件进行服务端的开发, 因为其整合了专门用于开发 Web 应用的各类框架和功能, 例如 Spring 框架,Hibernate 框架等 本书使用的版本是 MyEclipse JSP 简介 JSP(Java Server Pages) 是一种动态网页开发技术 这项技术是在 Servlet 基础 之上开发的, 继承了 Java Servlet 所有的优秀功能, 使用 JSP 可以十分高效的创建和 开发具有安全性高 可跨平台特点的 Web 应用程序 Tomcat 服务器 Tomcat 服务器是一个免费的开放源代码的 Web 应用服务器, 属于轻量级应用 服务器, 在中小型系统和并发访问用户不是很多的场合下被普遍使用, 是开发和调试 JSP 程序的首选 对于一个初学者来说, 可以这样认为, 当在一台机器上配置好 Apache 服务器, 可利用它响应 HTML( 标准通用标记语言下的一个应用 ) 页面的访 问请求 实际上 Tomcat 部分是 Apache 服务器的扩展, 但它是独立运行的, 所以当你运行 Tomcat 时, 它实际上作为一个与 Apache 独立的进程单独运行的 也就是 说, 将你的项目放入到 Tomcat 服务器中, 你就可以去访问你所开发的项目了 我们所使用的 MyEclipse 2015 开发工具已经集成了 Tomcat 7.0 版本 但是, 出于学习的目的, 我们还是需要掌握如何去配置和搭建 Tomcat 服务器 (1) 下载 Tomcat 首先, 我们进入 Apache 官网 ( 去下载 Tomcat 如 图 11-1 所示 : 377

59 实战案例教程 图 11-1 下载 Tomcat 服务器步骤 找到官网左侧菜单栏 Download 栏目, 选择你所需要的 Tomcat 版本, 在这里, 我们选 Tomcat 8 进行下载 如图 11-2 所示 图 11-2 下载 Tomcat 服务器步骤 点击 Tomcat 8 进入, 选择系统对应版本进行下载 如图 11-3 所示 : 378

60 第 11 章 App 网络服务器管理程序设计 Servlet 通过创建一个框架来扩展服务器的能力, 以提供在 Web 上进行请求和相应的服务 当客户端发送请求至服务器时, 服务器可以将请求信息发送给 Servlet, 并让 Servlet 建立起服务器返回给客户端的反应 当启动 Web 服务器或客户端第一次请求服务时, 可以自动装入 Servlet, 之后 Servlet 继续运行直到其他客户端发出请求,Servlet 是一个 Java 类,Java 语言能够实现的功能,Servlet 基本上都可以实现 ( 图形界面除外 ) 总的来说,Servlet 是运行在服务器端的程序, 用于处理及响应客户端的请求 在 Servlet 的整个生命周期中,Servlet 的处理过程如图 所示 : 图 Servlet 的处理过程 图 所示各步骤的说明如下 : (1) 用户通过客户端浏览器请求服务器, 服务器加载 Servlet 并创建一个 Servlet 实例 ; (2) 容器调用 Servlet 的 init() 方法 ; (3) 容器调用 Servelt 的 service() 方法, 并将 HttpServletRequest 和 HttpServletResponse 对象传递给改方法, 在 service() 方法中处理用户请求 ; (4) 在 Servlet 中请求处理结束后, 将结果返回给容器 ; (5) 容器将结果返回给客户端进行显示 ; (6) 当 Web 容器关闭时, 调用 destroy() 方法销毁 Servlet 实例 掌握 HttpServletRequest 类 Request 对象代表了客户端的请求信息, 主要用于接受通过 HTTP 协议传送到服务器的数据 ( 包括头信息 系统信息 请求方式以及请求参数等 ) Request 对象的作用域为一次请求 当客户端向服务器端发送请求时, 服务器为本次请求创建 Request 对象, 并在调用 Servlet 的 service 方法时, 将该对象传递给 service 方法 Request 对象中封装了客户端发送过来的所有的请求数据 Request 对象获取请求参数的方法有以下几个, 如表 11-1 所示 389

61 实战案例教程 表 11-1 request 对象方法方法名方法介绍 String getparameter(string name ) String[] getparametervalues(string name) Enumeration<String> getparameternames() Map<String,String[]> getparametermap() 掌握 HttpServletResponse 类 获取指定名称的请求参数值, 适用于单值的请求参数获取指定名称的请求参数值, 适用于多值的请求参数 获取所有的请求参数名称 获取所有请求参数, 其中参数名作为 map 的 key, 参数值作为 map 的 value. Response 代表的是对客户端的响应, 主要是将服务器处理过的对象传回到客户端 Response 对象也具有作用域, 它只在 JSP 页面内有效 方法名 Response.write() Response.redirect() 实战演练 表 11-2 Response 对象的常用方法函数 方法介绍 将指定的字符串写到当前的 HTTP 输出 Redirect 方法可以使浏览器从当前网页转向到其他网页 在这小节中, 我们将通过实际的小项目来加深对 Request 对象与 Respones 对象 的理解 1. 首先新建一个项目名为 code1101 的 Web 项目 2. 在 src 文件夹下建立一个名为 drhelp.cn.servlet 的包, 右击 src 文件夹选择 New 再选择 Package 如图 所示 图 新建 drhelp.cn.servlet 包 3. 新建 servlet 类 右击 drhelp.cn.servlet 包, 操作如图 所示 390

62 第 11 章 App 网络服务器管理程序设计 图 新建 servlet 类 4. 点击 Servlet 后, 弹出如下对话框, 填写 Servlet 类名 图 填写 Servlet 类名 5. 点击 finish 后即可 进入创建好的 Servlet 类中, 我们可以看到, 这个 Servlet 有 inti() 方法 destroy() 方法 goget() 方法和 dopost() 方法 Init 和 destroy 方法前面我们已经介绍过了 那么 doget 方法和 dopost 方法函数分别是用来处理客 户端提出的 Get 请求和 Post 请求 Get 请求和 Post 请求是指定了 method= Get 或者 method= Post 的表单时发出的请求 我们在 dopost() 方法中定义一个 String 类型对象 year 用于存放客户端传递过 来的值, 再通过 response 对象将 year 传递给前台 391

63 实战案例教程 107 flag = true; 108 } 109 con.close(); 110 } catch (SQLException e) { 111 e.printstacktrace(); 112 } 113 return flag; 114 } 115 } 问题模块 Servlet 类 在问题模块的 Servlet 类中, 我们都知道只有一个 dopost 或者 doget 方法, 可 是我们问题模块具有三个功能, 分别是提交问题 回复问题和查询问题 那么如何 能够每一次都按需求自己选择执行对应的功能呢? 其实要解决这个问题不难, 我们只需要让 android 客户端也传递一个标识变量, 然后在 dopost 或者 doget 方法中使 用 if 语句判断这个标识变量在运行相对应的程序代码即可 首先在包 drhelp.cn.servlet 中新建一个问题模块的 servlet 类 QuestionServlet 我们将代码写在 dopost 方法中, 那么 doget 方法里面就需要添加代码如下 : this.dopost(request, response) dopost 中代码如下 : 1 protected void dopost(httpservletrequest request, HttpServletResponse response) throws ServletException, IOException { 2 response.setcharacterencoding("utf-8"); 3 PrintWriter out = response.getwriter(); 4 String flag=request.getparameter("flag"); 5 QuestionImpl qi=new QuestionImpl(); 6 if("insert".equals(flag)){// 提交问题 7 Boolean result=qi.insertquestion(request.getparameter("question")); 8 out.write(result+""); 9 }else if("update".equals(flag)){// 回复问题 10 boolean result=qi.updatequestion(request.getparameter("question")); 11 out.write(result+""); 12 }else{// 查询问题 13 List<Question> questions=qi.getquestions(request.getparameter("keyword")); 14 Gson gson=new Gson(); 15 String result=gson.tojson(questions); 16 out.write(result); 17 } 18 } 首先定义一个 String 类型 flag 来存放 android 客户端传递过来的标识变量 ( 值为 query 或者 null, 默认即为查询 ;update 为回复问题 ;insert 为提交问题 ), 我们 使用 if 语句来对 flag 进行判断, 并在 if 里面调用不同的方法进行不同的操作 到这里, 我们问题模块的 Servlet 类也编写好了 接下来, 我们将项目部署到 420

64 第 12 章 App 客户端与服务器交互设计 前面章节中, 已经实现了用本地临时数据的 豹考通 客户端和搭建好的服务端, 客户端还没有和服务端进行交互 本章主要实现客户端替换临时数据与服务端 进行交互, 其中包括客户端和服务端交互理论 省控线查询 模块与服务端交互实 现过程 历年录取线查询 模块与服务端交互实现过程和 报考咨询 模块与服务端交互实现过程 12.1 客户端和服务端数据交互基础 HttpClient Android 客户端与服务器端交互方式通常有两种 : 一种是直接采用 Android 内置 的 HttpClient 发送 HTTP 请求和获取 HTTP 响应 ; 另一种是利用 ksoap2-android 项目, 调用服务器端提供的 WebService 豹考通 项目中采用第一种方式, 通过 HttpClient 与服务器端进行交互 HttpClient 是 Apache 开源组织提供的一个项目,HttpClient 开发过程中所涉及的 类主要包含以下几个 HttpClient: HTTP 客户端接口, 该接口封装了执行 Http 请求所需要的各 种对象, 这些对象可以处理 cookie 授权 连接管理以及其他一些特性 HttpClient 的线程安全依赖于具体的客户端的实现和配置 该接口中包含多 种 execute() 方法, 用于执行具体的请求, 通常通过 DefaultHttpClient 子类 来创建该接口的对象 HttpGet: 该类采用 GET 方式发送 HTTP 请求, 通常将请求的 URL 作为参数传给该类的构造方法 ; HttpPost: 该类采用 POST 方式发送 HTTP 请求, 通常将请求的 URL 作为参数传给该类的构造方法 ; HttpResponse: 该接口封装了 HTTP 的相应信息, 通过调用相应方法可以获取 HTTP 响应信息, 例如获取响应状态 响应内容等 HttpEntity:HTTP 信息封装类, 通过该类可以获取 HTTP 请求或响应的内容 长度 类型 编码方式等信息,HttpEntity 对象可以通过 Http 消息发送和接收, 既可以存在于请求消息中, 也可以存在于响应消息中 423

65 实战案例教程 否 HttpClient hc = new DefaultHttpClient() 是否携带参数 是 拼接 URL 地址 (url) GET HttpGet httpget = new HttpGet(url); 根据 URL 地址创建 HttpGet 对象 (httpget) HttpResponse hp = hc.execute(httpget); 执行 HttpClient 的 execute() 方法, 获取 HttpResponse 对象 (hp) HttpEntity he = hp.getentity(); 执行 HttpResponse 的 getentity() 方法, 获取 HttpEntity 对象 (he) 创建 HttpClient 对象 (hc) 采用何种方法发送请求 InputStream is = he.getcontent(); 定义需访问的服务器资源 URL 地址 (urlstr) 执行 HttpEntity 的 getcontent() 方法, 获取对应的输入流 POST 根据 URL 地址创建 HttpPost 对象 (httppost) 否是否携带参数是 NameValuePair pair1 = new BasicNameValuePair(" 名称 ", 值 ); 创建参数列表, 每个参数以键值对的形式, 保存在 NameValuePair 中 HttpEntity he = new UrlEncodedFormEntity(params, "UTF-8"); 根据参数创建 HttpEntity 对象 (he) httppost.setentity(he); 将 HttpEntity 对象赋给 HttpPost 对象 HttpResponse hp = hc.execute(httppost); 执行 HttpClient 的 execute() 方法, 获取 HttpResponse 对象 (hp) HttpEntity het = hp.getentity(); 执行 HttpResponse 的 getentity() 方法, 获取 HttpEntity 对象 (het) InputStream is = het.getcontent(); 读取输入流中的内容, 并以字符串的形式返回 图 12-1 HttpClient 发送请求的过程 424

66 第 12 章 App 客户端与服务器交互设计 这些类又是如何协同工作共同来完成 Http 请求和获取响应信息的呢? 通常我 们会采用 GET 和 POST 两种方式来发送请求, 而 GET 和 POST 发送请求各有优缺点, 需根据具体的情境进行选择, 两者的操作模式有所差别, 主要是参数传递方式 有所不同 因此, 在通过 HttpClient 与服务器端交互时, 需要针对这两种情况单独 处理 使用 HttpClient 发送请求获取响应信息的流程如图 12-1 所示 通过图中所述执行过程, 我们可以总结出无论是使用 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 以上 ), 将访问网络看做是一种较 为耗时的操作, 不能直接在主线程中访问网络, 需要单独启动线程或通过异步任务来访问网络 网络服务器端返回结果解析 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 格式的字符串, 一个是需要转换的对象的类型 详细代码会在后面的具体模块实现部分列 出 425

67 实战案例教程 12.2 本章案例实现流程 本章是在前面开发本地客户端和网络服务器开发完成的基础上进行完成 首先, 在前面开发的客户端基础上把第三方 jar 包导入 ; 其次, 在 util 文件夹下, 创建一些 与服务端交互用到的工具类 ; 然后, 分别实现与服务端交互的 省控线查询 历年录取线查询 和 报考咨询 三个模块, 具体流程图请参考图 实现 省控线查询 模块与服务端交互 1. 导入第三方工具包 2. 实现和服务端进行交互工具类 4. 实现 历年录取线查询 模块与服务端交互 5. 实现 报考咨询 模块与服务端交互 图 12-2 实现 客户端与服务端交互 的开发流程 426

68 第 12 章 App 客户端与服务器交互设计 12.3 第三方 Jar 包导入 豹考通 客户端项目中主要用到了两个第三方 Jar 包 :gson jar 和 org.apache.http.legacy.jar 包 导入第三方 jar 包有两种方式, 具体如下 方式一 : 1. 下载需要的 jar 包 2. 将 jar 包复制到 Project 下的 app >libs 目录下 ( 没有 libs 目录就新建一个 ) 如下图 12-3 所示位置 图 12-3 复制 Jar 包到 libs 文件夹下 3. 右键该 jar 包, 选择 add as library, 添加依赖包, 弹出如下窗口, 点击 ok 即可, 如图 12-4 所示 (a) add as library 图 12-4 添加依赖包 (b) Add to module 4. 打开 build.gradle 文件, 在 dependencies 方法中出现 Jar 包名称, 说明导入成功, 如图 12-5 所示 427

69 实战案例教程 方式二 : 1. 下载需要的 jar 包 图 12-5 Jar 包导入成功 2. 将 jar 包复制到 Project 下的 app >libs 目录下 ( 没有 libs 目录就新建一个 ) 如图 12-6 所示位置 图 12-6 复制 Jar 包到 libs 文件夹下 3. 点击工具栏中的 Project Structure 按钮, 如下图 12-7 所示 所示 图 12-7 点击 Project Structure 按钮 4. 选择 Dependencies, 点击右边的加号, 选择第二项 Jar Dependency, 如下图

70 第 12 章 App 客户端与服务器交互设计 开始 监听录取分数线查询条件筛选栏获取查询参数 否 开启获取学校查询分数线线程 调用 AccessToServer 工具类 获取学校录取分数线 线程发送 Message 信息 是否选择专业 oncreate 方法中匹配 Message 信息 JSON 数据解析 显示省控线列表信息 结束 开启获取专业查询分数线线程 调用 AccessToServer 工具类 获取专业录取分数线 线程发送 Message 信息 图 历年录取线查询 模块实现具体流程 获取服务端学校录取线和专业录取线 在 EnrollScoreFragment 类定义常量,Handler 和 Gson 常量, 代码如下 程序清单 :Code1202\app\src\main\java\cn\jxufe\iet\code1202\fragment\EnrollScoreFragment.java 1 private Handler mhandler; 2 private boolean isfinishedinit = false;// 是否完成初始化 3 private int schoolserviceid;// 学校在服务端数据库中 Id 事件监听条件筛选栏发生一些改变, 因为由原来本地临时数据转换成从服务端获取数据, 请求服务端数据时需要传递查询学校在服务端的 Id 信息 所以在事件监 听器类 MyItemSelectedListener 做一些简单的调整, 在 case R.id.schoolSpinner: 下 添加 schoolserviceid = schoollist.get(position).getschoolid();// 获取学校在服务端数据库中 Id 代码, 如图 所示 是 439

71 第 12 章 App 客户端与服务器交互设计 程序清单 :Code1203\app\src\main\java\cn\jxufe\iet\code1203\fragment\ConsultFragment.java 2 public void onresume() { 3 super.onresume(); 4 gethistoryquestion(keywordview.gettext().tostring().trim()); 5 } 从服务端获取反馈历史问题 JSON 数据后, 需要把数据 JSON 数据解析并以列表的形式显示 重写 oncreate 方法中, 匹配发送信息后, 解析 JSON 数据后调用 showquestions 方法显示列表数据, 代码如下 程序清单 :Code1203\app\src\main\java\cn\jxufe\iet\code1203\fragment\ConsultFragment.java 1 public void oncreate(bundle savedinstancestate) { 2 super.oncreate(savedinstancestate); 3 mhandler = new Handler() { 5 public void handlemessage(message msg) { 6 String result = (String) msg.obj; 7 result = (String) msg.obj; 8 switch (msg.what) { 9 case Constants.GET_QUESTIONS: 10 if ("exception".equals(result) "error".equals(result) 11 "".equals(result)) { 12 Toast.makeText(getActivity(), " 访问服务器异常!", 13 Toast.LENGTH_SHORT); 14 return; 15 } 16 questions = gson.fromjson(result, 17 new TypeToken<List<Question>>() { 18 }.gettype()); 19 if (questions!= null) { 20 showquestions(); 21 } 22 break; 23 default: 24 break; 25 } 26 } 27 };// 初始化 Handler 对象 28 } 在上面代码中, 我们发现 showquestions 方法还没有实现,showQuestions 方法 是显示问题列表, 具体代码如下 程序清单 :Code1203\app\src\main\java\ cn\jxufe\iet\code1203\fragment\consultfragment.java 1 public void showquestions() {// 显示问题列表 ConsultAdapter consultadapter=new 2 ConsultAdapter(getActivity(),questions); 3 questionlistview.setadapter(consultadapter); 4 } 445

72 实战案例教程 提问 模块实现 图 提问 界面 点击 提问 按钮, 能够把咨询编辑框内输入的内容, 提交到服务端, 并能更新问题列表数据, 如图 所示 首先需要对提问按钮匿名内部类事件监听, 并 把输入的问题封装成 JSON 数据格式, 便于后面提交到服务端, 具体代码如下 程序清单 :Code1203\app\src\main\java\cn\jxufe\iet\code1203\fragment\ConsultFragment.java 1 submit.setonclicklistener(new View.OnClickListener() {// 提交按钮的事件处理 2 public void onclick(view v) { 3 String questioncontent = contentview.gettext().tostring() 4.trim();// 获取输入的问题 5 if ("".equals(questioncontent)) { 6 AlertDialog.Builder builder = new AlertDialog.Builder( 7 getactivity()); builder.setmessage(" 请输入咨询的问题, 内容不能为空!");// 对话 8 框显示的内容 9 builder.create().show();// 创建并显示对话框 10 } else { 11 Question question = new Question(); 12 question.setquestioncontent(contentview.gettext() 13.toString()); 14 question.setquestiontime(util.getdate()); 15 questionstring = gson.tojson(question); 16 submitquestion(); 17 } 18 } 19 });// 提问按钮的单击事件处理 提交问题获取并封装成 JSON 数据后需要把数据提交到服务端, 在上面代码我 们也发现 submitquestion 方法还未实现, 这时需要实现 submitquestion 方法, 并通 过调用 AccessToServer 工具类把数据提交到服务端, 具体代码如下 程序清单 :Code1203\app\src\main\ java\cn\jxufe\iet\code1203\fragment\consultfragment.java 1 public void submitquestion() { 2 if (Util.isNetworkConnected(getActivity())) { 3 new Thread() { 4 public void run() {// 线程执行体 5 AccessToServer accesstoserver = new AccessToServer(); 6 String result = accesstoserver.dopost(global.url 7 + "QuestionServlet", new String[] { "question", 446

73 13.1 单元测试 第 13 章 App 集成测试 单元测试, 是指对软件中的最小可测单元进行检查和验证 对于单元测试中单 元的含义, 一般来说, 要根据实际情况去判定其具体含义, 如 C 语言中单元指一个 函数,Java 中单元指一个类, 图形化的软件中可以指一个窗口或一个菜单等, 总的来说, 单元就是人为规定的最小的被测功能模块 单元测试是在软件开发过程中要 进行的最低级别的测试活动, 软件的独立单元将在与程序的其他部分相隔离的情况 下进行测试 单元测试主要以白盒测试为主, 夹杂着少量的黑盒测试 黑盒测试 黑盒测试也称功能测试, 它是通过测试来检测每个功能是否都能正常使用 在 测试中, 把程序看作一个不能打开的黑盒子, 在完全不考虑程序内部结构和内部特性的情况下, 在程序接口进行测试, 它只检查程序功能是否按照需求规格说明书的 规定正常使用, 程序是否能适当地接收输入数据而产生正确的输出信息 黑盒测试 着眼于程序外部结构, 不考虑内部逻辑结构, 主要针对软件界面和软件功能进行测试 下面以 历年高考省控线查询 模块为例 图 13-1 历年高考省控线查询 界面图 输入年份查询省控线, 如图 13-2 图 13-3 图 13-4 和图 13-5 所示 451

74 实战案例教程 图 13-2 查询省控线结果 图 13-3 查询省控线结果 图 13-4 查询省控线结果 图 13-5 查询省控线结果 由上图测试可知, 历年高考省控线查询 模块功能可正常实现 452

75 第 13 章 App 集成测试 白盒测试 白盒测试又称结构测试 透明盒测试 逻辑驱动测试或基于代码的测试 白盒 测试是一种测试用例设计方法, 盒子指的是被测试的软件, 白盒指的是盒子是可视的, 你清楚盒子内部的东西以及里面是如何运作的 白盒 法全面了解程序内部逻 辑结构 对所有逻辑路径进行测试 此处用语句覆盖 ( 每条语句至少执行一次 ) 的 方式对 历年高考省控线查询 模块进行测试 (1) 运用数组实现 历年高考省控线查询 的核心类代码如下所示 2. public class demo extends Activity { 3. private String year; 4. private TextView tv; 5. private Button b1; 6. private EditText et; 8. protected void oncreate(bundle savedinstancestate) { 9. // TODO Auto-generated method stub 10. super.oncreate(savedinstancestate); 11. setcontentview(r.layout.demo); 12. b1=(button) findviewbyid(r.id.button); 13. tv= (TextView) findviewbyid(r.id.result1); 14. et=(edittext) findviewbyid(r.id.input1); 15. b1.setonclicklistener(new OnClickListener() { 17. public void onclick(view v) { 18. // TODO Auto-generated method stub 19. year=et.gettext().tostring(); 20. System.out.println(year); 21. getcontrolline(); 22. } 23. }); 24. } 25. public void getcontrolline() { 26. boolean flag=true; 27. String[][] data={{"2013","617"},{"2014","630"}}; 28. for(int i=0;i<data.length;i++){ 29. if(year.equals(data[i][0])){ 30. flag=false; 31. String result=data[i][1]; 32. tv.settext(result); 33. } 34. } 35. // 无数据显示暂无数据 36. if(flag){ 37. tv.settext(" 暂无数据 "); 38. } 39. } 40. } 453

76 实战案例教程 首先, 我们需要设计用例, 用例如表 13-1 所示 表 13-1 历年高考省控线查询测试用例 用例编号输入数据预期输出 1 year = year = year = 2015 暂无数据 然后, 打开 Android Studio, 初始化界面如图 13-6 所示 图 13-6 Android Studio 开始界面 向 Android Studio 中导入 bktdemo( 本地数据版历年高考省控线查询模块 ) 向 历年高考省控线查询 的核心类代码中加入三条测试语句 (7,33,39 三行, 加 粗部分 ), 代码如下所示 2. public class demo extends Activity { 3. private String year; 4. private TextView tv; 5. private Button b1; 6. private EditText et; 7. private static final String TAG = "demo";// 定义以当前类名为值的 TAG 常量 9. protected void oncreate(bundle savedinstancestate) { 10. // TODO Auto-generated method stub 11. super.oncreate(savedinstancestate); 12. setcontentview(r.layout.demo); 13. b1=(button) findviewbyid(r.id.button); 454

77 实战案例教程 图 13-7 历年高考省控线查询主界面 接下来, 我们需要创建日志过滤器来过滤掉一些不必要的日志信息, 点击 6:Android Monitor, 将出现如图 13-8 所示界面 图 13-8 Android Monitor 界面 我们在 Regex 下拉菜单中选择 Edit Filter Configuration, 如图 13-9 所示 456

78 第 13 章 App 集成测试 图 13-9 Android Monitor 界面 选择 Edit Filter Configuration 之后, 将出现如下对话框, 我们在 Filter Name 中输入 testcontrolline,log Tag 中输入 demo,log Level 下拉菜单中选择 Warn, 然后点击 OK 如图 所示 图 Create New Logcat Filter 界面 最后, 我们在模拟器界面上依次输入 2013,2014 和 2015 三个年份来查询省控 线 如图 13-11,13-12,13-13 所示 457

79 实战案例教程 图 程序目录结构 test.java 代码如下 : 1. package test; 2. import db.dbconn; 3. public class test { 4. public static void main(string[] args) { 5. DBconn dbc=new DBconn(); 6. dbc.getconnection(); 7. } 8. } 新建 DBconn 对象, 再调用 DBconn 对象的 getconnection 方法 运行 test.java 文件, 结果如下图 所示 图 数据库连接类测试结果 Jave Web 服务器访问 MySql 数据库集成测试 在第 3 章设计网络服务器小节中, 我们在 MyEclipse 中编写好了数据库连接类, 存放数据用的实体类, 实施数据库操作的工具类, 其目录结构如图 所示 460

80 实战案例教程 图 数据库操作类实现结果 上面的结果还不完全是 Java Web 服务器访问 MySQL 数据库的结果 还需要我们实现 Servlet 类 Servlet 类是 Web 服务器或客户端第一次请求服务器时运行的 java 类 在我们服务器中, 我们使用 Gson 来解析 JSON 数据,Gson 是 Google 提供的用 来在 Java 对象和 JSON 数据之间进行映射的 Java 类库, 它可以将一个 JSON 字符串转换成一个 java 对象, 也能够将一个 java 对象转换成 JSON 字符串 上面步骤全部 完成之后, 我们就编写好了服务器端 接下来我们需要将项目部署到 Tomcat 服务器 中, 部署完之后, 启动 Tomcat 服务器, 打开浏览器, 在地址栏输入 这就是 android 客户端查询 省控线的接口 简单理解的话就是向服务器传递年份 2013 输入 URL 之后如果出现如图 所示结果, 那么服务器端就算成功完成了 也就说明我们的 Java Web 服务器能够成功访问到 MySQL 数据库中的数据 图 测试结果 Android 客户端访问 Java Web 服务器集成测试由上述 小节可知, 我们的 Java Web 服务器已经能够成功地访问到 MySQL 数据库中的数据, 那么我们能否将查询到的数据传输给安卓客户端呢? 我们需要在 Android 端, 建立实体类来存放从服务器端传递过来的 JSON 数据 建好实体类之后, 还需要建立一个工具类用来访问服务器和获取服务器返回的结果 上述步骤全部完成之后, 我们将 Android 客户端运行起来, 其主界面如图 所示 462

81 第 13 章 App 集成测试 图 运行客户端主界面 我们在查询框中依次输入 两个年份来查询省控线, 目的是测试 Android 客户端能否成功访问 Java Web 服务器, 其执行结果如图 13-21,13-22 所示 463

82 实战案例教程 图 测试结果 图 测试结果 由上述测试结果可知, 我们已经在 Android 客户端成功访问到 Java Web 服务器 13.3 豹考通 案例集成测试流程 集成测试流程 豹考通 案例集成测试流程如图 所示 464

83 第 13 章 App 集成测试 合并实现多页 (6) 面切换效果 (7) 分数线趋势图 豹考通 demo 历年高考省控历年录取线报考咨询个人中心 (2) (3) (4) (5) 线查询 1 查询 九 五 十 创建本地数据 (8) 库 SQLite (1) 一 (9) 十一 (14) (13) 网络数据库 MySQL 十八 历年高考省控线查询 2 服务器 二三四 六七八 豹考通完整版 (19) 历年录取线 (10) 查询 2 (11) 十三十五 历年高考省控 (15) 线查询 3 (16) 历年录取线查询 3 二十 十九 十二 二十二 十四 二十一 二十四 报考咨询 2 (17) 报考咨询 3 个人中心 2 个人中心 3 二十六 二十七 图 豹考通 案例集成测试流程图 十六 二十三 十七 (12) 二十五 (18) 其中 (1) ( 2) ( 3)... 等序号代表依次集成顺序, 一 二 三... 等序号 代表操作行为 豹考通 demo 是集成测试的第一个基础, 它实现了 历年高考省控线查询 的功 能 ( 界面如图 所示 ) 465

84 第 14 章 创业思维训练 作为本书内容的提高版, 本章介绍了我们在软件工程 ( 移动商务方向 ) 本科生中开展的一个培养 互联网 + 创业人才的教学案例, 供对 互联网 + 创新创业有 兴趣的师生选读, 意在抛砖引玉, 以期进一步提升 的价值 14.1 创业思维训练的价值 有利于 自身的长远发展 1. 通过分析计算机人才培养以及许多程序员成长过程, 我们很容易发现绝大部 分程序员更强调算法的研究以及实施确定性的商业方案, 对互联网创业规律不熟悉而错过很多好机会 主要表现有 : (1) 以求得稳定的编程工资或外包费用为主, 不敢创业, 怕冒险 (2) 模仿式的创新为主, 项目定位不清, 商业意识不强, 盲目参与创业 (3) 技术研发习惯解决确定性的需求, 不了解互联网创业常常通过早期产品来 获取用户需求 产品满足新需求不断迭代的办法, 并因此而与创业团队有较大的抵触, 影响创业项目的成长 (4) 在面临颠覆式创新机会时, 即使自己掌握了这一机会, 也怕大公司介入而 不敢创业, 错失良机 (5) 因不懂互联网创业股权和期权等方面的知识, 要么过于乐观, 要么过于保 守, 导致创业项目后期因股权 期权等方面的矛盾难以解决, 严重影响项目的发展 2. 当前我国倡导大学生 互联网 + 创新创业, 而大学开设的创业课程常常面 向所有专业的, 并不针对程序员开设 对于程序员来说, 这类课程指导性不强, 起 不到应有之作用 主要表现有 : (1) 因大学生专业知识所限, 互联网 + 创新创业从项目选择开始就走很多弯路, 浪费学生宝贵的时间, 还可能因时间错过而直接放弃 (2) 大学生不了解有什么好的创新技术可用于互联网 + 创业, 不熟悉其应用领 域, 而导致大学生思路难以打开, 感觉创业无从下手 (3) 因为指导老师多数也没有创业经验, 存在前述程序员创业的通病, 也无法有效指导大学生创业 (4) 现在的创业课程缺乏好的技术体验内容, 很多已经有课程常常技术太深而 难以让学生快速了解, 学生常转而选择简单的已有商业形态的项目 483

85 实战案例教程 3. 互联网 + 创业公司常有开发 App 要求, 如互联网 + 具体应用的 App, 但大学 生互联网 + 创新创业教育更是希望短平快的可模仿课程, 目前这类课程资源很少 特别应用物联网技术 人工智能技术的创业项目, 在许多大学里面更没有相应的实 践课程 这就导致大学生互联网 + 创业实践中, 创意难以落地 有利于高校开展 互联网 + 双创人才培养工作 通过开展有别于不分专业的大众化的创业课程中的学习与训练, 面向 App 程序 员群体, 可以更好地推动不同院校的大学生 互联网 + 创新创业工作的有效开展 这类学习与训练有助于程序员更清楚了解互联网 + 创业项目的选择, 能区分颠覆式创新与改进性创新对于创业的影响, 掌握精益创业的基本常识, 明确互联网 + 创业公司的股权 期权常识, 理解互联网 + 创业公司的发展规律, 使程序员能更好 地抓住机会 勇于创业 善于创业, 作一个好的创业项目的技术合伙人 大学生可以更早地体验以物联网 人工智能 大数据为基础的互联网 + 创业项 目的应用以及发展前景, 启发大学生去思考 去设计基于这些技术的商业应用 这种训练课程, 有利于解决当前普通大学的学生互联网 + 创新创业教育落地难的问题 随着大学生全国互联网 + 创新创业活动的不断推进, 许多大学生也都想将 自己的好点子, 用 App 实现, 因为没有好的课程与教学案例可供学习而进展困难 特别是在许多非重点高校, 情况尤其严重 总之, 这部分内容和课程的建设有利于在大学生中普及互联网 + 创业知识, 提 高 IT 类大学生开展互联网 + 创业的综合能力, 也有利于帮助培养适合于 互联网 + 初创公司的程序员, 还有利于提高计算机类大学生的就业能力 14.2 创业思维训练基础 绝大多数程序员参与创业, 都不是自己当老板 多数大学生在校或刚走向社会 时, 创业的条件是不成熟的 但是, 掌握一些创业常识, 还是很必要 掌握定位理论, 选好创业项目 选择常常重于努力, 会不会选很重要 是否加入一家创业公司, 或者启动一个 创业项目, 是首要问题 它决定了你将来几年的精力投入和收入保证, 影响你的长 远发展 即使一个成熟项目或成熟公司, 也可问问其前景如何? 我有加入必要吗? 此时, 定位思想很有用 定位理论源自营销定位, 我们认为它对于创业也有指导意义 通过网络搜索或 看营销图书, 读者很方便地读到相关知识 本书省略理论介绍, 提出几个最基本的问题 ( 见表 14-1) 供程序员思考, 以培养其创业思维 实际上, 定位理论作用广泛, 对一个人的定位 一个地区的定位, 乃至一个国 家的定位都是有参考意义的 484

86 第 14 章 创业思维训练 表 14-1 创业项目定位的若干思考点 序号思考问题 定位关键点 应避免的误区 1 我提供什么同别的产品功能差不多, 或者什么功能产品或服有什么功能或作用, 即功能定位 都想要, 追求处处比人优 比人强 务? 2 试图讨好每个人, 变成大家都不满意 ; 我为谁服满足某一类人, 或人的某一类需求, 试图服务人的各方面需求, 导致哪方面务? 即消费者定位 都不突出, 没人买帐 3 产品为社会提供了什么价值, 人们愿谁的钱都想赚 ; 或者人们的各方面钱你我赚人哪方意花钱购买具有这一价值的产品, 即都想赚 价值不大, 或有其他渠道能满面的钱? 价值定位 足且价格更低, 可选更便捷的方法 4 差异化定位 : 产品 用户 渠道等之做太多, 干自己的能力或资源无法满足为什么是一或多个方面我有独特之处 ; 资源匹的事 ; 别人能行, 我也行 ; 市场调查不我? 配 : 我能干而别人不能干或不愿意干, 充分, 过于乐观, 困难估计不足 我有什么不可替代的优势 了解创新者的窘境, 思考创业项目的创新路径 无创新不可能创好业, 互联网 + 创业更是以创新推动创业 但是思考创新路 径, 对于很多程序员来说是完全没有思考的, 绝大部分人都仅从更多 更优 更强等因素出发, 为创新而创新, 而没把创新放到创业的背景下来开展 表 14-2 列出了 创业时对于创新路径的选择时需要思考的一些问题 表 14-2 创业项目创新路径的若干思考点 序号 思考问题 创新路径关键点 应避免的误区 1 用有新功能的产品替代现有当全新产品目标是老产品完全忽视的边我要创造产品还是有明显价格优势的缘市场用户需求时, 过于强调其完美程什么新产产品替代同样功能的老产品, 度, 不敢早日推向市场, 或者一开始就品? 还是创造老产品不能满足边希望全新产品会被主流市场认可 缘市场需求的新产品 2 以改进性创新的思想看待颠覆性创新技我的产品我的创新是走技术改进道路, 术, 持悲观态度, 瞧不起新机会, 错失时有何技术还是实现颠覆性技术 产品是机 ; 老想着颠覆式的破坏创新, 追风口, 创新? 价廉物美, 还是市场空白? 不屑于持续性的改进创新 3 我的小众市场在哪里? 用新技术解决主流市场未满足的用户痛点, 这些痛点老技术无法解决或解决不经济 只调查现有主流市场的用户需求, 得到不可行的结果, 或者只考虑将新技术用于解决老产品的问题 4 引导需求, 从边缘走向主流 我的产品信心不足, 缺乏改进创新行动 认为主通过持续改进, 将价很廉 物怎么占领流市场永远不会看上有新功能的替代不够美的, 变成价廉物美 ; 将主流市品 不相信小众产品有望瓜分 替代主填补空白的价高的, 提质 降场? 流市场产品, 甚至创造新市场的实力 价 覆盖主流产品功能 5 创新的高风险和不稳定, 我准备好了吗? 敢于面对不利局面, 你的创新可能被人认为简单 低质 不需要 一文不值, 只要明白自己的产品满足了新市场 新需求, 承认缺点, 勇往直前 破坏性创新具有的高风险不值得尝试, 回到模仿大公司的老路上 以己之短攻彼之长 485

87 倚动实验室简介 清华大学出版社手机软件与移动商务系列教材总主编 教育部 Goog l e 支持的产学合作协同育人项目课题组 国家自然科学基金 全国教育科学规划项目课题组 全国 互联网 + 创新创业教育协作联盟服务团队 大学生手机软件设计竞赛技术支持骨干团队 江西省科技型中小企业技术创新基金项目课题组 移动互联网 + 专业方向校企合作 研究生联合培养基地 1 软件工程 ( 移动商务方向 ) 江西财经大学软件与通信工程学院 2 教育技术学 ( 移动学习与手机软件开发 ), 江西财经大学 江西农业大学等 3 计算机应用技术 ( 手机软件班 ) 江西机电职业技术学院 1. 定位 文化和培养目标 定 2010 年创办, 博士生导师领衔, 本 硕 博协作, 融学术研究于社 会实践, 以创新促进创业, 培养大学生 互联网 + 创新创业能力 从 0 到 1, 开创多个初创项目, 成长良好 承担了一系列研究项目 研发多门 互联网 + 双创课程, 出版 10 部 互联网 + 双创系列教 材, 被全国 100 多所高校选用 开发多款 App, 卓导 App 服务于考研大学生与研究生导师, 豹考 通 App 服务高考考生与家长, 力图实现优质资源最佳匹配 位 : 互联网 + 双创训练营 文化理念 : 不拼爹, 创先机 培养目标 : 互联网 + 公司合伙人 3. 实践教学与学术研究相结合路径图 2. 产品领域 训练方法与运营模式 产品领域 :O2O 服务 训练方法 : 精益创业 运营模式 : 市场化驱动 1. 开发软件 社交化竞赛 2. 纵向研究课题 卓导 3. 实践教学案例 豹考通 1 教学成果奖 2 科技进步奖 4. 产品服务 5. 成果固化 6. 奖励 1 软件 数据库 2 学术论文 3 省部级课题 4 教材 专著 5 学生研究课题 6 学生奖励

88

res/layout 目录下的 main.xml 源码 : <?xml version="1.0" encoding="utf 8"?> <TabHost android:layout_height="fill_parent" xml

res/layout 目录下的 main.xml 源码 : <?xml version=1.0 encoding=utf 8?> <TabHost android:layout_height=fill_parent xml 拓展训练 1- 界面布局 1. 界面布局的重要性做应用程序, 界面是最基本的 Andorid 的界面, 需要写在 res/layout 的 xml 里面, 一般情况下一个 xml 对应一个界面 Android 界面布局有点像写 html( 连注释代码的方式都一样 ), 要先给 Android 定框架, 然后再在框架里面放控件,Android 提供了几种框架,AbsoluteLayout,LinearLayout,

More information

主程式 : public class Main3Activity extends AppCompatActivity { ListView listview; // 先整理資料來源,listitem.xml 需要傳入三種資料 : 圖片 狗狗名字 狗狗生日 // 狗狗圖片 int[] pic =new

主程式 : public class Main3Activity extends AppCompatActivity { ListView listview; // 先整理資料來源,listitem.xml 需要傳入三種資料 : 圖片 狗狗名字 狗狗生日 // 狗狗圖片 int[] pic =new ListView 自訂排版 主程式 : public class Main3Activity extends AppCompatActivity { ListView listview; // 先整理資料來源,listitem.xml 需要傳入三種資料 : 圖片 狗狗名字 狗狗生日 // 狗狗圖片 int[] pic =new int[]{r.drawable.dog1, R.drawable.dog2,

More information

untitled

untitled JavaEE+Android - 6 1.5-2 JavaEE web MIS OA ERP BOSS Android Android Google Map office HTML CSS,java Android + SQL Sever JavaWeb JavaScript/AJAX jquery Java Oracle SSH SSH EJB+JBOSS Android + 1. 2. IDE

More information

基于CDIO一体化理念的课程教学大纲设计

基于CDIO一体化理念的课程教学大纲设计 Java 语 言 程 序 设 计 课 程 教 学 大 纲 Java 语 言 程 序 设 计 课 程 教 学 大 纲 一 课 程 基 本 信 息 1. 课 程 代 码 :52001CC022 2. 课 程 名 称 :Java 语 言 程 序 设 计 3. 课 程 英 文 名 称 :Java Programming 4. 课 程 类 别 : 理 论 课 ( 含 实 验 上 机 或 实 践 ) 5. 授

More information

エスポラージュ株式会社 住所 : 東京都江東区大島 東急ドエルアルス大島 HP: ******************* * 关于 Java 测试试题 ******

エスポラージュ株式会社 住所 : 東京都江東区大島 東急ドエルアルス大島 HP:  ******************* * 关于 Java 测试试题 ****** ******************* * 关于 Java 测试试题 ******************* 問 1 运行下面的程序, 选出一个正确的运行结果 public class Sample { public static void main(string[] args) { int[] test = { 1, 2, 3, 4, 5 ; for(int i = 1 ; i System.out.print(test[i]);

More information

SDK 概要 使用 Maven 的用户可以从 Maven 库中搜索 "odps-sdk" 获取不同版本的 Java SDK: 包名 odps-sdk-core odps-sdk-commons odps-sdk-udf odps-sdk-mapred odps-sdk-graph 描述 ODPS 基

SDK 概要 使用 Maven 的用户可以从 Maven 库中搜索 odps-sdk 获取不同版本的 Java SDK: 包名 odps-sdk-core odps-sdk-commons odps-sdk-udf odps-sdk-mapred odps-sdk-graph 描述 ODPS 基 开放数据处理服务 ODPS SDK SDK 概要 使用 Maven 的用户可以从 Maven 库中搜索 "odps-sdk" 获取不同版本的 Java SDK: 包名 odps-sdk-core odps-sdk-commons odps-sdk-udf odps-sdk-mapred odps-sdk-graph 描述 ODPS 基础功能的主体接口, 搜索关键词 "odpssdk-core" 一些

More information

本章学习目标 小风 Java 实战系列教程 SpringMVC 简介 SpringMVC 的入门案例 SpringMVC 流程分析 配置注解映射器和适配器 注解的使用 使用不同方式的跳转页面 1. SpringMVC 简介 Spring web mvc

本章学习目标 小风 Java 实战系列教程 SpringMVC 简介 SpringMVC 的入门案例 SpringMVC 流程分析 配置注解映射器和适配器 注解的使用 使用不同方式的跳转页面 1. SpringMVC 简介 Spring web mvc 本章学习目标 SpringMVC 简介 SpringMVC 的入门案例 SpringMVC 流程分析 配置注解映射器和适配器 配置视图解析器 @RequestMapping 注解的使用 使用不同方式的跳转页面 1. SpringMVC 简介 Spring web mvc 和 Struts2 都属于表现层的框架, 它是 Spring 框架的一部分, 我们可 以从 Spring 的整体结构中看得出来 :

More information

Microsoft Word 杨超-spinner实现省市县的三级联动.docx

Microsoft Word 杨超-spinner实现省市县的三级联动.docx Spinner 实现省市县的三级联动 1801210908- 杨超 下拉框 Spinner 控件 : 常用属性 属性 说明 android:prompt 下拉提示信息 android:spinnermode 下拉显示方法 android:entries 配置下拉框数据源 android:dropdownwidth 下拉框显示模式下的显示项宽度 常用方法 方法 说明 getdropdownwidth()

More information

一 登录 crm Mobile 系统 : 输入 ShijiCare 用户名和密码, 登录系统, 如图所示 : 第 2 页共 32 页

一 登录 crm Mobile 系统 : 输入 ShijiCare 用户名和密码, 登录系统, 如图所示 : 第 2 页共 32 页 第 1 页共 32 页 crm Mobile V1.0 for IOS 用户手册 一 登录 crm Mobile 系统 : 输入 ShijiCare 用户名和密码, 登录系统, 如图所示 : 第 2 页共 32 页 二 crm Mobile 界面介绍 : 第 3 页共 32 页 三 新建 (New) 功能使用说明 1 选择产品 第 4 页共 32 页 2 填写问题的简要描述和详细描述 第 5 页共

More information

1 1 大概思路 创建 WebAPI 创建 CrossMainController 并编写 Nuget 安装 microsoft.aspnet.webapi.cors 跨域设置路由 编写 Jquery EasyUI 界面 运行效果 2 创建 WebAPI 创建 WebAPI, 新建 -> 项目 ->

1 1 大概思路 创建 WebAPI 创建 CrossMainController 并编写 Nuget 安装 microsoft.aspnet.webapi.cors 跨域设置路由 编写 Jquery EasyUI 界面 运行效果 2 创建 WebAPI 创建 WebAPI, 新建 -> 项目 -> 目录 1 大概思路... 1 2 创建 WebAPI... 1 3 创建 CrossMainController 并编写... 1 4 Nuget 安装 microsoft.aspnet.webapi.cors... 4 5 跨域设置路由... 4 6 编写 Jquery EasyUI 界面... 5 7 运行效果... 7 8 总结... 7 1 1 大概思路 创建 WebAPI 创建 CrossMainController

More information

长 安 大 学 硕 士 学 位 论 文 基 于 数 据 仓 库 和 数 据 挖 掘 的 行 为 分 析 研 究 姓 名 : 杨 雅 薇 申 请 学 位 级 别 : 硕 士 专 业 : 计 算 机 软 件 与 理 论 指 导 教 师 : 张 卫 钢 20100530 长安大学硕士学位论文 3 1 3系统架构设计 行为分析数据仓库的应用模型由四部分组成 如图3 3所示

More information

FJXBQ

FJXBQ 高等医学院校选用教材 ( 供成人教育中医药专业 中西医结合专业使用 ) 方剂学 闫润红 主编 2 0 0 1 内容简介本书是供成人教育中医药专业 中西医结合专业使用的教材 全书分总论和各论两部分, 总论部分对中医方剂的基本理论, 如治法 君臣佐使 剂型 剂量等及其现代研究进展进行了介绍 各论部分对常用方剂的主治病证 配伍意义 临床应用 加减变化规律及现代研究概况等内容, 按分类进行了系统阐述 在保证方剂学学科知识结构完整性的前提下,

More information

1.JasperReport ireport JasperReport ireport JDK JDK JDK JDK ant ant...6

1.JasperReport ireport JasperReport ireport JDK JDK JDK JDK ant ant...6 www.brainysoft.net 1.JasperReport ireport...4 1.1 JasperReport...4 1.2 ireport...4 2....4 2.1 JDK...4 2.1.1 JDK...4 2.1.2 JDK...5 2.1.3 JDK...5 2.2 ant...6 2.2.1 ant...6 2.2.2 ant...6 2.3 JasperReport...7

More information

图书在版编目穴 CIP 雪数据做事细节全书 / 赵彦锋编著郾 北京 : 企业管理出版社, ISBN Ⅰ 郾做... Ⅱ 郾赵... Ⅲ 郾工作方法 通俗读物 Ⅳ 郾 B 中国版本图书馆 CIP 数据核字 (2005) 第 号 书

图书在版编目穴 CIP 雪数据做事细节全书 / 赵彦锋编著郾 北京 : 企业管理出版社, ISBN Ⅰ 郾做... Ⅱ 郾赵... Ⅲ 郾工作方法 通俗读物 Ⅳ 郾 B 中国版本图书馆 CIP 数据核字 (2005) 第 号 书 做事细节全书 赵彦锋著 企业管理出版社 图书在版编目穴 CIP 雪数据做事细节全书 / 赵彦锋编著郾 北京 : 企业管理出版社, 2005.11 ISBN 7-80197-338-0 Ⅰ 郾做... Ⅱ 郾赵... Ⅲ 郾工作方法 通俗读物 Ⅳ 郾 B026-49 中国版本图书馆 CIP 数据核字 (2005) 第 136676 号 书 名 : 做事细节全书 作 者 : 赵彦锋 责任编辑 : 吴太刚

More information

预览图 : (2) 在 SelectCity.java 中增加控件, 用于绑定 select_city 文件的 ListView, TextView,EditTest 等控件 代码和注释如下 :

预览图 : (2) 在 SelectCity.java 中增加控件, 用于绑定 select_city 文件的 ListView, TextView,EditTest 等控件 代码和注释如下 : EditText 实现城市搜索 1801210778 邹宇航 摘要 : 使用 EditText 实现搜索城市的功能, 以此为依据更新 ListView 1. 效果图 : 2. 主要步骤 (1) 在 select-city.xml 布局文件中中添加 EditText 控件用作搜索框, 然后添加 ListView 控件用来显示城市名字内容 代码如下 : 预览图 : (2) 在 SelectCity.java

More information

OOP with Java 通知 Project 4: 4 月 18 日晚 9 点 关于抄袭 没有分数

OOP with Java 通知 Project 4: 4 月 18 日晚 9 点 关于抄袭 没有分数 OOP with Java Yuanbin Wu cs@ecnu OOP with Java 通知 Project 4: 4 月 18 日晚 9 点 关于抄袭 没有分数 复习 类的复用 组合 (composition): has-a 关系 class MyType { public int i; public double d; public char c; public void set(double

More information

Android Fragment

Android Fragment Android Fragment 建國科技大學資管系饒瑞佶 2017/10 V1 Android 3.0 後才支援 Fragment 解決部分 App 適應螢幕大小的問題 它類似於 Activity, 可以像 Activity 可以擁有自己的版面設計, 也和 Activity 一樣有自己的生命週期 ( 具備 oncreate() oncreateview() 與 onpause() 方法 ) LifeCycle

More information

建模与图形思考

建模与图形思考 F06_c 观摩 :ContentProvider 基於軟硬整合觀點 架构與 DB 引擎移植方法 ( c) By 高煥堂 4 通用性基类 ContentProvider 基於軟硬整合觀點 的使用范例 刚才的范例里, 我们直接使用 DataPersist 类的接口来与 SQLite 沟通 本节将替 DataPersist 配上 ContentProvider 基类, 让 Client 能透过 ContentProvider

More information

09 (File Processes) (mkdir) 9-3 (createnewfile) 9-4 (write) 9-5 (read) 9-6 (deletefile) 9-7 (deletedir) (Exercises)

09 (File Processes) (mkdir) 9-3 (createnewfile) 9-4 (write) 9-5 (read) 9-6 (deletefile) 9-7 (deletedir) (Exercises) 09 (File Processes) 9-1 9-2 (mkdir) 9-3 (createnewfile) 9-4 (write) 9-5 (read) 9-6 (deletefile) 9-7 (deletedir) (Exercises) Java Servlet 9-1 Servlet (File Processes) Client Servlet Servlet Java Java (Stream)

More information

帝国CMS下在PHP文件中调用数据库类执行SQL语句实例

帝国CMS下在PHP文件中调用数据库类执行SQL语句实例 帝国 CMS 下在 PHP 文件中调用数据库类执行 SQL 语句实例 这篇文章主要介绍了帝国 CMS 下在 PHP 文件中调用数据库类执行 SQL 语句实例, 本文还详细介绍了帝国 CMS 数据库类中的一些常用方法, 需要的朋友可以参考下 例 1: 连接 MYSQL 数据库例子 (a.php)

More information

Android Android Android SDK iv

Android Android Android SDK iv Android Market Google Android SDK Apple Google Microsoft b2c b 2010 Internet Android how why iii Android 240... Android Android SDK iv Android Market Google Android SDK Visual C++ Java N-tier J2EE Unix/Linux

More information

图书在版编目 (CIP) 数据 满堂花醉 / 沈胜衣著. 南京 : 江苏教育出版社, ( 沈郎文字 ) ISBN Ⅰ. 满... Ⅱ. 沈... Ⅲ. 作家 - 人物研究 - 世界 Ⅳ.K815.6 中国版本图书馆 CIP 数据核字 (2005) 第 041

图书在版编目 (CIP) 数据 满堂花醉 / 沈胜衣著. 南京 : 江苏教育出版社, ( 沈郎文字 ) ISBN Ⅰ. 满... Ⅱ. 沈... Ⅲ. 作家 - 人物研究 - 世界 Ⅳ.K815.6 中国版本图书馆 CIP 数据核字 (2005) 第 041 图书在版编目 (CIP) 数据 满堂花醉 / 沈胜衣著. 南京 : 江苏教育出版社, 2005.4 ( 沈郎文字 ) ISBN 7-5343-6512-0 Ⅰ. 满... Ⅱ. 沈... Ⅲ. 作家 - 人物研究 - 世界 Ⅳ.K815.6 中国版本图书馆 CIP 数据核字 (2005) 第 041843 号 出版者社址网址出版人 南京市马家街 31 号邮编 :210009 http://www.1088.com.cn

More information

计算机软件技术专业教学计划

计算机软件技术专业教学计划 计 算 机 软 件 技 术 专 业 人 才 培 养 方 案 ( 服 务 外 包 方 向 ) 专 业 大 类 名 称 ( 代 码 ):++(++) 专 业 类 名 称 ( 代 码 ):++++++(++++) 专 业 名 称 ( 代 码 ):+++++++(++++++) 修 业 年 限 : 三 年, 全 日 制 招 生 对 象 : 三 年 制 普 通 高 中 及 对 口 中 职 专 业 毕 业 生

More information

新・解きながら学ぶJava

新・解きながら学ぶJava 481! 41, 74!= 40, 270 " 4 % 23, 25 %% 121 %c 425 %d 121 %o 121 %x 121 & 199 && 48 ' 81, 425 ( ) 14, 17 ( ) 128 ( ) 183 * 23 */ 3, 390 ++ 79 ++ 80 += 93 + 22 + 23 + 279 + 14 + 124 + 7, 148, 16 -- 79 --

More information

Microsoft PowerPoint - 02-Servlet-Basics-Chinese.ppt

Microsoft PowerPoint - 02-Servlet-Basics-Chinese.ppt 2004 Marty Hall servlet 基础 JSP, Servlet, & Struts Training Courses: http://courses.coreservlets.com Available in US, China, Taiwan, HK, and Worldwide 2 JSP and Servlet Books from Sun Press: http://www.coreservlets.com

More information

<4D6963726F736F667420576F7264202D20BBF9D3DA416E64726F6964C6BDCCA8B5C4B5E7D7D3C5C4C2F4CFB5CDB32E646F63>

<4D6963726F736F667420576F7264202D20BBF9D3DA416E64726F6964C6BDCCA8B5C4B5E7D7D3C5C4C2F4CFB5CDB32E646F63> 基 于 Android 平 台 的 电 子 拍 卖 系 统 摘 要 本 电 子 拍 卖 系 统 其 实 就 是 一 个 电 子 商 务 平 台, 只 要 将 该 系 统 部 署 到 互 联 网 上, 客 户 都 可 以 在 该 系 统 上 发 布 想 出 售 的 商 品, 也 可 以 对 拍 卖 中 的 商 品 参 与 竞 价 整 个 过 程 无 须 人 工 干 预, 由 系 统 自 动 完 成 本

More information

untitled

untitled 653 JAVA 2008 11 Institution of Software Engineer... 2... 4... 4... 5... 5... 8... 8... 8... 8... 8... 9... 9... 9... 11... 13... 13... 13... 13... 15... 15... 15... 15... 16... 16... 17... 17... 17...

More information

詞 彙 表 編 號 詞 彙 描 述 1 預 約 人 資 料 中 文 姓 名 英 文 姓 名 身 份 證 字 號 預 約 人 電 話 性 別 2 付 款 資 料 信 用 卡 別 信 用 卡 號 信 用 卡 有 效 日 期 3 住 房 條 件 入 住 日 期 退 房 日 期 人 數 房 間 數 量 入

詞 彙 表 編 號 詞 彙 描 述 1 預 約 人 資 料 中 文 姓 名 英 文 姓 名 身 份 證 字 號 預 約 人 電 話 性 別 2 付 款 資 料 信 用 卡 別 信 用 卡 號 信 用 卡 有 效 日 期 3 住 房 條 件 入 住 日 期 退 房 日 期 人 數 房 間 數 量 入 100 年 特 種 考 試 地 方 政 府 公 務 人 員 考 試 試 題 等 別 : 三 等 考 試 類 科 : 資 訊 處 理 科 目 : 系 統 分 析 與 設 計 一 請 參 考 下 列 旅 館 管 理 系 統 的 使 用 案 例 圖 (Use Case Diagram) 撰 寫 預 約 房 間 的 使 用 案 例 規 格 書 (Use Case Specification), 繪 出 入

More information

RecyclerView and CardVew

RecyclerView and CardVew RecyclerView and CardView 建國科技大學資管系饒瑞佶 2017/10 V1 CardView CardView A CardView is a ViewGroup. Like any other ViewGroup, it can be added to youractivity or Fragment using a layout XML file. To create an

More information

(TestFailure) JUnit Framework AssertionFailedError JUnit Composite TestSuite Test TestSuite run() run() JUnit

(TestFailure) JUnit Framework AssertionFailedError JUnit Composite TestSuite Test TestSuite run() run() JUnit Tomcat Web JUnit Cactus JUnit Java Cactus JUnit 26.1 JUnit Java JUnit JUnit Java JSP Servlet JUnit Java Erich Gamma Kent Beck xunit JUnit boolean JUnit Java JUnit Java JUnit Java 26.1.1 JUnit JUnit How

More information

XXXXXXXX http://cdls.nstl.gov.cn 2 26

XXXXXXXX http://cdls.nstl.gov.cn 2 26 [ ] [ ] 2003-7-18 1 26 XXXXXXXX http://cdls.nstl.gov.cn 2 26 (2003-7-18) 1...5 1.1...5 1.2...5 1.3...5 2...6 2.1...6 2.2...6 2.3...6 3...7 3.1...7 3.1.1...7 3.1.2...7 3.1.2.1...7 3.1.2.1.1...8 3.1.2.1.2...10

More information

目 录 第 五 部 分 第 六 部 分 第 七 部 分 第 八 部 分 投 标 邀 请 投 标 人 须 知 附 表 评 标 方 法 和 评 分 细 则 项 目 需 求 和 技 术 方 案 要 求 1

目 录 第 五 部 分 第 六 部 分 第 七 部 分 第 八 部 分 投 标 邀 请 投 标 人 须 知 附 表 评 标 方 法 和 评 分 细 则 项 目 需 求 和 技 术 方 案 要 求 1 政 府 采 购 招 标 文 件 ( 服 务 类 ) 第 二 册 项 目 编 号 :SDGP2016-224 项 目 名 称 : 公 共 法 律 服 务 系 统 开 发 项 目 包 号 :A1 山 东 省 省 级 机 关 政 府 采 购 中 心 目 录 第 五 部 分 第 六 部 分 第 七 部 分 第 八 部 分 投 标 邀 请 投 标 人 须 知 附 表 评 标 方 法 和 评 分 细 则 项 目

More information

resp.getwriter().print(j + "*" + i + "=" + j * i+" "); resp.getwriter().print("<br/>"); protected void dopost(httpservletrequest req, HttpServletRespo

resp.getwriter().print(j + * + i + = + j * i+ ); resp.getwriter().print(<br/>); protected void dopost(httpservletrequest req, HttpServletRespo 第三章补充案例 案例 3-1 HttpServlet 一 案例描述 1 考核知识点名称 :HttpServlet 编号 : 2 练习目标 掌握 HttpServlet 的 doget() 方法和 dopost() 方法 3 需求分析由于大多数 Web 应用都是通过 HTTP 协议和客户端进行交互, 因此, 在 Servlet 接口中, 提供了 一个抽象类 javax.servlet.http.httpservlet,

More information

使用 Eclipse 开发 Java EE 应用 (Web 应用 ) 这里以开发一个简单的 Web 应用为例, 介绍使用 Eclipse 开发 Java EE 应用的一般步 骤 此处使用的 Eclipse 是 Eclipse IDE for Java EE Developers; 如果是使用的其他

使用 Eclipse 开发 Java EE 应用 (Web 应用 ) 这里以开发一个简单的 Web 应用为例, 介绍使用 Eclipse 开发 Java EE 应用的一般步 骤 此处使用的 Eclipse 是 Eclipse IDE for Java EE Developers; 如果是使用的其他 使用 Eclipse 开发 Java EE 应用 (Web 应用 ) 这里以开发一个简单的 Web 应用为例, 介绍使用 Eclipse 开发 Java EE 应用的一般步 骤 此处使用的 Eclipse 是 Eclipse IDE for Java EE Developers; 如果是使用的其他 Eclipse 插件 ( 比如 MyEclipse 插件 ), 其开发方式和步骤可能略有差异和不同 在该例中,

More information

單步除錯 (1/10) 打開 Android Studio, 點選 Start a new Android Studio project 建立專案 Application name 輸入 BMI 點下 Next 2 P a g e

單步除錯 (1/10) 打開 Android Studio, 點選 Start a new Android Studio project 建立專案 Application name 輸入 BMI 點下 Next 2 P a g e Android Studio Debugging 本篇教學除了最基本的中斷點教學之外, 還有條件式中斷的教學 條件式中斷是進階的除錯技巧, 在某些特定情況中, 我們有一個函數可能會被呼叫數次, 但是我們只希望在某種條件成立時才進行中斷, 進而觀察變數的狀態 而條件式中斷這項技巧正是符合這項需求 本教學分兩部分 單步除錯 (Page2~11, 共 10) 條件式中斷點 (Page12~17, 共 6)

More information

Dynamic Layout in Android

Dynamic Layout in Android Dynamic Layout in Android 建國科技大學資管系 饒瑞佶 2013/5 V1 Layout 多半都透過 res/layout/xml 格式設定來達成 Android 是 OOP, 所以可以動態產生 Layout 重點是 Layout 的階層關係 (Hierarchy) 需要處理對應事件 最後一樣用 setcontentview 加入 Layout 一 加入現有 Layout 中

More information

图书在版编目 (CIP) 数据 文学与现代性批判 / 邵建著. 南京 : 江苏教育出版社, ISBN Ⅰ. 文... Ⅱ. 邵... Ⅲ. 当代文学 - 文学研究 - 中国 Ⅳ.I206.7 中国版本图书馆 CIP 数据核字 ( 2005 ) 第 04185

图书在版编目 (CIP) 数据 文学与现代性批判 / 邵建著. 南京 : 江苏教育出版社, ISBN Ⅰ. 文... Ⅱ. 邵... Ⅲ. 当代文学 - 文学研究 - 中国 Ⅳ.I206.7 中国版本图书馆 CIP 数据核字 ( 2005 ) 第 04185 图书在版编目 (CIP) 数据 文学与现代性批判 / 邵建著. 南京 : 江苏教育出版社, 2005.4 ISBN 7-5343-6528-7 Ⅰ. 文... Ⅱ. 邵... Ⅲ. 当代文学 - 文学研究 - 中国 Ⅳ.I206.7 中国版本图书馆 CIP 数据核字 ( 2005 ) 第 041850 号 出版者社址网址出版人 南京市马家街 31 号邮编 :210009 http://www.1088.com.cn

More information

Microsoft PowerPoint - 05-Status-Codes-Chinese.ppt

Microsoft PowerPoint - 05-Status-Codes-Chinese.ppt 2004 Marty Hall 服务器响应的生成 : HTTP 状态代码 JSP, Servlet, & Struts Training Courses: http://courses.coreservlets.com Available in US, China, Taiwan, HK, and Worldwide 2 JSP and Servlet Books from Sun Press: http://www.coreservlets.com

More information

Microsoft Word - 第1章 Android基本概念.docx

Microsoft Word - 第1章 Android基本概念.docx Android 系 统 下 Java 编 程 详 解 作 者 : 华 清 远 见 第 1 章 Android 基 本 概 念 本 章 简 介 本 章 主 要 介 绍 Android 基 本 概 念 方 面 的 内 容, 包 括 Android 平 台 特 性 Android 系 统 架 构 Android 开 发 框 架 和 Android 开 发 环 境 搭 建 1.1 Android 简 介 Android

More information

心理障碍防治(下).doc

心理障碍防治(下).doc ( 20 010010) 787 1092 1/32 498.50 4 980 2004 9 1 2004 9 1 1 1 000 ISBN 7-204-05940-9/R 019 1880.00 ( 20.00 ) ...1...2...2...3...4...5...6...7...8...9...10... 11...12...13...15...16...17...19...21 I ...23...24...26...27...28...30...32...34...37...39...40...42...42...44...47...50...52...56...58...60...64...68

More information

Guava学习之Resources

Guava学习之Resources Resources 提供提供操作 classpath 路径下所有资源的方法 除非另有说明, 否则类中所有方法的参数都不能为 null 虽然有些方法的参数是 URL 类型的, 但是这些方法实现通常不是以 HTTP 完成的 ; 同时这些资源也非 classpath 路径下的 下面两个函数都是根据资源的名称得到其绝对路径, 从函数里面可以看出,Resources 类中的 getresource 函数都是基于

More information

Office Office Office Microsoft Word Office Office Azure Office One Drive 2 app 3 : [5] 3, :, [6]; [5], ; [8], [1], ICTCLAS(Institute of Computing Tech

Office Office Office Microsoft Word Office Office Azure Office One Drive 2 app 3 : [5] 3, :, [6]; [5], ; [8], [1], ICTCLAS(Institute of Computing Tech - OfficeCoder 1 2 3 4 1,2,3,4 xingjiarong@mail.sdu.edu.cn 1 xuchongyang@mail.sdu.edu.cn 2 sun.mc@outlook.com 3 luoyuanhang@mail.sdu.edu.cn 4 Abstract. Microsoft Word 2013 Word 2013 Office Keywords:,, HTML5,

More information

OOP with Java 通知 Project 4: 4 月 19 日晚 9 点

OOP with Java 通知 Project 4: 4 月 19 日晚 9 点 OOP with Java Yuanbin Wu cs@ecnu OOP with Java 通知 Project 4: 4 月 19 日晚 9 点 复习 类的复用 组合 (composition): has-a 关系 class MyType { public int i; public double d; public char c; public void set(double x) { d

More information

图书在版编目 (CIP) 数据程序员的数学. 3, 线性代数 /( 日 ) 平冈和幸, ( 日 ) 堀玄著 ; 卢晓南译. 北京 : 人民邮电出版社, ( 图灵程序设计丛书 ) ISBN Ⅰ. 1 程 Ⅱ. 1 平 2 堀 3 卢 Ⅲ. 1 电子计算

图书在版编目 (CIP) 数据程序员的数学. 3, 线性代数 /( 日 ) 平冈和幸, ( 日 ) 堀玄著 ; 卢晓南译. 北京 : 人民邮电出版社, ( 图灵程序设计丛书 ) ISBN Ⅰ. 1 程 Ⅱ. 1 平 2 堀 3 卢 Ⅲ. 1 电子计算 图灵程序设计丛书 程序员的数学 3: 线性代数 [ 日 ] 平冈和幸堀玄著 卢晓南译 图书在版编目 (CIP) 数据程序员的数学. 3, 线性代数 /( 日 ) 平冈和幸, ( 日 ) 堀玄著 ; 卢晓南译. 北京 : 人民邮电出版社, 2016.3 ( 图灵程序设计丛书 ) ISBN 978-7-115-41774-9 Ⅰ. 1 程 Ⅱ. 1 平 2 堀 3 卢 Ⅲ. 1 电子计算机 数学基础 2

More information

untitled

untitled 图书在版编目 (CIP) 数据 家居美化中的巧 / 陈赞等编著. 北京 : 中国林业出版社,2003.4 ISBN 7-5038-3399-8 I. 家 II. 陈 III. 住宅 室内装饰 基本知识 IV.TU241 中国版本图书馆 CIP 数据核字 (2003) 第 022376 号 版权所有翻印必究 1 2002.10 1 ...1...1...2...2...3...4...5...6...7...8...8...10...10...11...12...12...13...13...15...15...16...17...18...19...20...20...20...21...22

More information

Microsoft Word zw

Microsoft Word zw 第 1 章 Android 概述 学习目标 : Android Android Android Studio Android Android APK 1.1 1. 智能手机的定义 Smartphone 2. 智能手机的发展 1973 4 3 PC IBM 1994 IBM Simon PDA PDA Zaurus OS 1996 Nokia 9000 Communicator Nokia 9000

More information

图书在版编目渊 CIP 冤数据速成财富课院成就富翁的圆缘条法则 / 石向前著援北京院蓝天出版社袁 2005 援员园 ISBN 愿怨 -1 玉援速... 域援石... 芋援商业经营要通俗读物郁援 F71 缘原源怨中国版本图书馆 CIP 数据核字渊 2005 冤第 0 愿怨猿猿员号

图书在版编目渊 CIP 冤数据速成财富课院成就富翁的圆缘条法则 / 石向前著援北京院蓝天出版社袁 2005 援员园 ISBN 愿怨 -1 玉援速... 域援石... 芋援商业经营要通俗读物郁援 F71 缘原源怨中国版本图书馆 CIP 数据核字渊 2005 冤第 0 愿怨猿猿员号 25 图书在版编目渊 CIP 冤数据速成财富课院成就富翁的圆缘条法则 / 石向前著援北京院蓝天出版社袁 2005 援员园 ISBN 7-80158-6 愿怨 -1 玉援速... 域援石... 芋援商业经营要通俗读物郁援 F71 缘原源怨中国版本图书馆 CIP 数据核字渊 2005 冤第 0 愿怨猿猿员号 蓝天出版社出版发行渊北京复兴路 14 号冤渊邮政编码院 100843 冤电话院 66983715

More information

F515_CS_Book.book

F515_CS_Book.book /USB , ( ) / L R 1 > > > 2, / 3 L 1 > > > 2 + - 3, 4 L 1 了解显示屏上显示的图标 Wap 信箱收到一条 Wap push 信息 ( ) GSM 手机已连接到 GSM 网络 指示条越多, 接收质量越好 2 ...........................4.............................. 4 Micro SD (

More information

EJB-Programming-4-cn.doc

EJB-Programming-4-cn.doc EJB (4) : (Entity Bean Value Object ) JBuilder EJB 2.x CMP EJB Relationships JBuilder EJB Test Client EJB EJB Seminar CMP Entity Beans Session Bean J2EE Session Façade Design Pattern Session Bean Session

More information

TopTest_Adminstrator.doc

TopTest_Adminstrator.doc 壹 前 言... 3 貳 系 統 簡 介... 4 一 TKB multimedia Top-Test 系 統 架 構...4 1. 使 用 者 介 面 層 (Presentation tier)...5 2. 商 業 邏 輯 層 (business logic tier)...5 3. 資 料 服 務 層 (data services tier)...5 二 TKB Multimedia Top-Test

More information

C++ 程序设计 告别 OJ1 - 参考答案 MASTER 2019 年 5 月 3 日 1

C++ 程序设计 告别 OJ1 - 参考答案 MASTER 2019 年 5 月 3 日 1 C++ 程序设计 告别 OJ1 - 参考答案 MASTER 2019 年 月 3 日 1 1 INPUTOUTPUT 1 InputOutput 题目描述 用 cin 输入你的姓名 ( 没有空格 ) 和年龄 ( 整数 ), 并用 cout 输出 输入输出符合以下范例 输入 master 999 输出 I am master, 999 years old. 注意 "," 后面有一个空格,"." 结束,

More information

软件工程文档编制

软件工程文档编制 实训抽象类 一 实训目标 掌握抽象类的定义 使用 掌握运行时多态 二 知识点 抽象类的语法格式如下 : public abstract class ClassName abstract void 方法名称 ( 参数 ); // 非抽象方法的实现代码 在使用抽象类时需要注意如下几点 : 1 抽象类不能被实例化, 实例化的工作应该交由它的子类来完成 2 抽象方法必须由子类来进行重写 3 只要包含一个抽象方法的抽象类,

More information

Microsoft Word - weather12 刷新按钮动画+搜索框+bug处理.docx

Microsoft Word - weather12 刷新按钮动画+搜索框+bug处理.docx 一 刷新按钮的动画效果 : 在刷新按钮的位置做两个按钮的布局, 一个是原来的静态图片, 一个是旋转的动画, 然 后控制这两个效果的显示和隐藏 ( 一 ) 刷新按钮的 style: 1. 在 app/src/main/res/values/ styles.xml 文件里添加一个 style: 2. 在 drawable 文件夹下新建一个 title_update_anim.xml, 添加如下内容 注

More information

Microsoft Word - Hibernate与Struts2和Spring组合指导.doc

Microsoft Word - Hibernate与Struts2和Spring组合指导.doc 1.1 组合 Hibernate 与 Spring 1. 在 Eclipse 中, 新建一个 Web project 2. 给该项目增加 Hibernate 开发能力, 增加 Hibernate 相关类库到当前项目的 Build Path, 同时也提供了 hibernate.cfg.xml 这个配置文件 3. 给该项目增加 Spring 开发能力, 增加 spring 相关类库到当前项目的 Build

More information

Ioncube Php Encoder 8 3 Crack 4. llamaba octobre traslado General Search colony

Ioncube Php Encoder 8 3 Crack 4. llamaba octobre traslado General Search colony Ioncube Php Encoder 8 3 Crack 4 ->>->>->> DOWNLOAD 1 / 5 2 / 5 Press..the..General..Tools..category4Encrypt..and..protect..files..with..PHP..encoding,..encryption,..ob fuscation..and..licensing... 2016

More information

<C8EBC3C5C6AAA3A8B5DA31D5C2A3A92E696E6464>

<C8EBC3C5C6AAA3A8B5DA31D5C2A3A92E696E6464> 第 1 章 进入 Photoshop 的全新世界 本章导读 Photoshop 1 1.1 Photoshop CS6 Photoshop Photoshop 1.1.1 Photoshop POP 1-1 图 1-1 平面广告效果 1.1.2 Photoshop 1-2 Photoshop CS6 Photoshop CS6 Photoshop CS6 Extended 3D 3 Photoshop

More information

untitled

untitled -JAVA 1. Java IDC 20 20% 5 2005 42.5 JAVA IDC JAVA 60% 70% JAVA 3 5 10 JAVA JAVA JAVA J2EE J2SE J2ME 70% JAVA JAVA 20 1 51 2. JAVA SUN JAVA J2EE J2EE 3. 1. CSTP CSTP 2 51 2. 3. CSTP IT CSTP IT IT CSTP

More information

建立Android新專案

建立Android新專案 Android 智 慧 型 手 機 程 式 設 計 Android WebService 建 國 科 技 大 學 資 管 系 饒 瑞 佶 2012/4 V1 2012/8 V2 2013/5 V3 2014/10 v4 提 醒 這 節 的 內 容 針 對 的 是 MS 的 Web Service 或 是 使 用 SOAP(Simple Object Access Protocol) 標 準 建 立

More information

Lecture01_Android介绍

Lecture01_Android介绍 移动平台应用软件开发 Android 介绍 主讲 : 张齐勋 zhangqx@ss.pku.edu.cn 移动平台应用软件开发 课程建设小组 北京大学 二零一七年秋北京 Android是什么 Android不仅仅是一个操作系统 它更是一个完整的软件框 架 Android基于Linux内核 2005年Google公司收购了Android公司 Google公司选择使用Apache许可证开放Android源码

More information

使用MapReduce读取XML文件

使用MapReduce读取XML文件 使用 MapReduce 读取 XML 文件 XML( 可扩展标记语言, 英语 :extensible Markup Language, 简称 : XML) 是一种标记语言, 也是行业标准数据交换交换格式, 它很适合在系统之间进行数据存储和交换 ( 话说 Hadoop H ive 等的配置文件就是 XML 格式的 ) 本文将介绍如何使用 MapReduce 来读取 XML 文件 但是 Had oop

More information

D getinitparameternames() 9 下 列 选 项 中, 属 于 Servlet API 中 提 供 的 request 对 象 的 包 装 类 的 是 ( ) A HttpServletRequestWrapper B HttpServletRequest C HttpServ

D getinitparameternames() 9 下 列 选 项 中, 属 于 Servlet API 中 提 供 的 request 对 象 的 包 装 类 的 是 ( ) A HttpServletRequestWrapper B HttpServletRequest C HttpServ 第 四 章 Filter( 过 滤 器 ) 样 题 A 卷 一 选 择 题 ( 每 小 题 2 分, 共 20 分 ) 1 下 面 选 项 中, 用 于 实 现 初 始 化 过 滤 器 的 方 法 是 ( ) A init(filterconfig filterconfig) B dofilter(servletrequest req,servletresponse resp,filterchain

More information

Android Service

Android Service Android Service- 播放音樂 建國科技大學資管系 饒瑞佶 2013/7 V1 Android Service Service 是跟 Activity 並行 一個音樂播放程式若沒使用 Service, 即使按 home 鍵畫面離開之後, 音樂還是照播 如果再執行一次程式, 新撥放的音樂會跟先前撥放的一起撥, 最後程式就會出錯 執行中的程式完全看不到! 但是, 寫成 Service 就不同了

More information

中医疗法(下).doc

中医疗法(下).doc ( 20 010010) 787 1092 1/32 498.50 4 980 2004 9 1 2004 9 1 1 1 000 ISBN 7-204-05940-9/R 019 1880.00 ( 20.00 ) ...1...2...3...4...13...15...17...17...24...25...26...26...28...28...29...31...31...33...33

More information

!"# $ %&'!"#$

!# $ %&'!#$ !"# $ %&'!"#$ 内容简介本书是在作者已经出版的 XilinxAlProgrammableZynq-7000SoC 设计指南 一书的基础上进行大幅度修订而成的 本书的一大特色就是更加突出 ARMCortex-A9 双核处理器的使用 此外, 在修订本书时采用了 Xilinx 最新的 Vivado2015 4 集成开发环境 通过本书的修订, 能反映最新的 ARM 嵌入式设计技术和实现方法, 同时也能更加凸显采用异构架构的

More information

眼病防治

眼病防治 ( 20 010010) 787 1092 1/32 498.50 4 980 2004 9 1 2004 9 1 1 1 000 ISBN 7-204-05940-9/R 019 1880.00 ( 20.00 ) ...1...1...2...3...5...5...6...7...9... 11...13...14...15...17...18...19...20...21 I II...21...22...23...24...25...27...27...28...29...30...31...33...33...34...36...38...39...40...41...42...43...45

More information

中国南北特色风味名菜 _八)

中国南北特色风味名菜 _八) ( 20 010010) 7871092 1/32 356.25 4 760 2004 8 1 2004 8 1 11 000 ISBN 7-204-05943-3/Z102 1026.00 ( 18.00 ) ...1...2...2...4...6...7...8...9... 10... 11... 12... 13... 13... 14... 15... 17... 18... 19...

More information

可 Web 编程的NativeUI 设计与实现

可 Web 编程的NativeUI  设计与实现 可 Web 编程的 NativeUI 设计与实现 张袁炜 zhangyuanwei@baidu.com 欢迎转岗简历请发 About Me @ 张袁炜 直达号 网址导航 百度 音乐 前端 Node.js Android Arduino RaspberryPI https://github.com/zhangyuanwei Outline 一个 Hybrid App 的进化史 Native UI 实现原理

More information

优迈科技教学大纲2009版本

优迈科技教学大纲2009版本 java 软 件 工 程 师 培 训 教 学 大 纲 1 JAVA 软 件 工 程 师 培 训 教 学 大 纲 深 圳 软 件 园 人 才 实 训 基 地 2009 年 3 月 目 录 java 软 件 工 程 师 培 训 教 学 大 纲 2 教 学 阶 段...3 第 一 章 JAVA 起 步...3 第 二 章 面 向 对 象 的 编 程...4 第 三 章 数 据 结 构 IO 线 程 网 络...5

More information

中医疗法(上).doc

中医疗法(上).doc ( 20 010010) 787 1092 1/32 498.50 4 980 2004 9 1 2004 9 1 1 1 000 ISBN 7-204-05940-9/R 019 1880.00 ( 20.00 ) ...1...1...1...2...4...5...7...13...15...17...18...19...21...23...24...24...26...26...27 I ...28...29...30...30...31...32...33...34...35...36...37...39...40...41...42...43...43...45...46...47...47...48

More information

OOP with Java 通知 Project 3 提交时间 3 月 29 日晚 9 点 Piazza Project 2 投票

OOP with Java 通知 Project 3 提交时间 3 月 29 日晚 9 点 Piazza Project 2 投票 OOP with Java Yuanbin Wu cs@ecnu OOP with Java 通知 Project 3 提交时间 3 月 29 日晚 9 点 Piazza Project 2 投票 复习 创建对象 构造函数 函数重载 : 函数 = 函数名 + 参数列表 public class MyType { int i; double d; char c; void set(double x)

More information

获取 Access Token access_token 是接口的全局唯一票据, 接入方调用各接口时都需使用 access_token 开发者需要进行妥善保存 access_token 的存储至少要保留 512 个字符空间 access_token 的有效期目前为 2 个小时, 需定时刷新, 重复

获取 Access Token access_token 是接口的全局唯一票据, 接入方调用各接口时都需使用 access_token 开发者需要进行妥善保存 access_token 的存储至少要保留 512 个字符空间 access_token 的有效期目前为 2 个小时, 需定时刷新, 重复 获取 Access Token access_token 是接口的全局唯一票据, 接入方调用各接口时都需使用 access_token 开发者需要进行妥善保存 access_token 的存储至少要保留 512 个字符空间 access_token 的有效期目前为 2 个小时, 需定时刷新, 重复 获取将导致上次获取的 access_token 失效 接入方可以使用 AppID 和 AppSecret

More information

Microsoft Word - Broker.doc

Microsoft Word - Broker.doc Broker 模式 采用 broker 模式对分布式计算进行简单模拟 系统在一个进程内模拟分布式环境, 因此不涉及网络编程和进程间通信,Broker 通过本地函数调用的方式实现 request 和 response 的转发 采用 broker 模式对分布式计算进行简单的模拟, 要求如下 : 设计四个 server, 一个 server 接收两个整数, 求和并返回结果, 一个 server 接收两个整数,

More information

第四章 102 图 4唱16 基于图像渲染的理论基础 三张拍摄图像以及它们投影到球面上生成的球面图像 拼图的圆心是相同的 而拼图是由球面图像上的弧线图像组成的 因此我 们称之为同心球拼图 如图 4唱18 所示 这些拼图中半径最大的是圆 Ck 最小的是圆 C0 设圆 Ck 的半径为 r 虚拟相机水平视域为 θ 有 r R sin θ 2 4畅11 由此可见 构造同心球拼图的过程实际上就是对投影图像中的弧线图像

More information

目 录 目 录... 2 1 平 台 概 述... 3 2 技 术 架 构... 4 3 技 术 特 点... 7 3.1 基 于 统 一 平 台 的 多 产 品 线 支 撑... 7 3.2 先 进 性... 7 3.3 安 全 性... 7 3.4 开 放 性... 8 3.5 高 性 能 和

目 录 目 录... 2 1 平 台 概 述... 3 2 技 术 架 构... 4 3 技 术 特 点... 7 3.1 基 于 统 一 平 台 的 多 产 品 线 支 撑... 7 3.2 先 进 性... 7 3.3 安 全 性... 7 3.4 开 放 性... 8 3.5 高 性 能 和 致 远 协 同 管 理 软 件 V5 平 台 白 皮 书 北 京 致 远 协 创 软 件 有 限 公 司 2014 年 6 月 1 / 20 目 录 目 录... 2 1 平 台 概 述... 3 2 技 术 架 构... 4 3 技 术 特 点... 7 3.1 基 于 统 一 平 台 的 多 产 品 线 支 撑... 7 3.2 先 进 性... 7 3.3 安 全 性... 7 3.4 开 放

More information

教案模板4-2

教案模板4-2 移动终端开发技术 电子教案 第三单元 ListView 的功能和用法 章节名称 : 第二章 软件要美观 UI 开发的点点滴滴 所属专业 ( 教研室 ): 计算机软件技术 制定人 : 陈媛媛 合作人 : 制定时间 : 2018 年 2 月 日照职业技术学院 单元标题 ListView 的功能和用法 单元教学学时 在整体设计中的位置 4 课时 第 7 次 授课班级上课地点一体化教室 上课时间周月日第节

More information

穨ecr2_c.PDF

穨ecr2_c.PDF i ii iii iv v vi vii viii 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 1 26 27 2 28 29 30 31 32 33 34 35 36 37 38 39 40 3 4 41 42 43 5 44 45 46 6 47 48 49 50 51 52 1 53 2 54 55 3 56

More information

電腦相關罪行跨部門工作小組-報告書

電腦相關罪行跨部門工作小組-報告書 - ii - - iii - - iv - - v - - vi - - vii - - viii - (1) 2.1 (2) (3) 13.6 (4) 1.6 (5) 21 (6) (7) 210 (8) (9) (10) (11) ( ) ( 12) 20 60 16 (13) ( ) (

More information

i

i i ii iii iv v vi vii viii ===== 1 2 3 4 5 6 7 8 9 10 ==== 11 12 13 14 15 16 17 18 19 ==== ==== 20 .. ===== ===== ===== ===== ===== ======.. 21 22 ===== ===== ===== ===== 23 24 25 26 27 28 29 ==== ====

More information

发展党员工作手册

发展党员工作手册 发 展 党 员 工 作 问 答 目 录 一 总 论...9 1. 发 展 党 员 工 作 的 方 针 是 什 么? 如 何 正 确 理 解 这 个 方 针?... 9 2. 为 什 么 强 调 发 展 党 员 必 须 保 证 质 量?... 9 3. 如 何 做 到 慎 重 发 展?... 10 4. 如 何 处 理 好 发 展 党 员 工 作 中 的 重 点 与 一 般 的 关 系?...11 5.

More information

i

i 9 1 2 3 4 i 5 6 ii iii iv v vi vii viii 1 1 1 2 3 4 2 5 6 2 3 2.10 ( 2.11 ) ( 2.11 ) ( 2.9 ) 7 8 9 3 10 5% 2% 4 11 93% (2001 02 2003 04 ) ( ) 2,490 (100%) 5 12 25% (2.57% 25%) 6 (2001 02 2003 04 ) 13 100%

More information

39898.indb

39898.indb 1988 4 1998 12 1990 5 40 70.................................................. 40.............................................................. 70..............................................................

More information

Microsoft Word - 01.DOC

Microsoft Word - 01.DOC 第 1 章 JavaScript 简 介 JavaScript 是 NetScape 公 司 为 Navigator 浏 览 器 开 发 的, 是 写 在 HTML 文 件 中 的 一 种 脚 本 语 言, 能 实 现 网 页 内 容 的 交 互 显 示 当 用 户 在 客 户 端 显 示 该 网 页 时, 浏 览 器 就 会 执 行 JavaScript 程 序, 用 户 通 过 交 互 式 的

More information

工程项目进度管理 西北工业大学管理学院 黄柯鑫博士 甘特图 A B C D E F G 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 甘特图的优点 : 直观明了 ( 图形化概要 ); 简单易懂 ( 易于理解 ); 应用广泛 ( 技术通用 ) 甘特图的缺点 : 不能清晰表示活动间的逻辑关系 WBS 责任分配矩阵 ( 负责〇审批

More information

// HDevelopTemplateWPF projects located under %HALCONEXAMPLES%\c# using System; using HalconDotNet; public partial class HDevelopExport public HTuple

// HDevelopTemplateWPF projects located under %HALCONEXAMPLES%\c# using System; using HalconDotNet; public partial class HDevelopExport public HTuple halcon 与 C# 混合编程之 Halcon 代码调用 写在前面 完成 halcon 与 C# 混合编程的环境配置后, 进行界面布局设计构思每一个按钮所需要实现 的功能, 将 Halcon 导出的代码复制至相应的 C# 模块下即可 halcon 源程序 : dev_open_window(0, 0, 512, 512, 'black', WindowHandle) read_image (Image,

More information

教案模板4-2

教案模板4-2 移动终端开发技术 电子教案 第三单元 SQLite 数据库存储 章节名称 : 第四章 数据都去哪了 详解数据存储 所属专业 ( 教研室 ): 计算机软件技术 制定人 : 陈媛媛 合作人 : 制定时间 : 2018 年 2 月 日照职业技术学院 单元标题 SQLite 数据库存储 单元教学学时 在整体设计中的位置 4 课时 第 15 次 授课班级上课地点一体化教室 上课时间周月日第节 能力目标知识目标素质目标

More information

使用Cassandra和Spark 2.0实现Rest API服务

使用Cassandra和Spark 2.0实现Rest API服务 使用 Cassandra 和 Spark 2.0 实现 Rest API 服务 在这篇文章中, 我将介绍如何在 Spark 中使用 Akkahttp 并结合 Cassandra 实现 REST 服务, 在这个系统中 Cassandra 用于数据的存储 我们已经见识到 Spark 的威力, 如果和 Cassandra 正确地结合可以实现更强大的系统 我们先创建一个 build.sbt 文件, 内容如下

More information

省份 科类 本一线 出档线 人数 最高分 最低分 平均分 理 青海 文 理 山东 文 理

省份 科类 本一线 出档线 人数 最高分 最低分 平均分 理 青海 文 理 山东 文 理 厦门大学 2006 年普高招生分省分专业录取分数统计表 省份 科类 本一线 出档线 人数 最高分 最低分 平均分 文 573 600 25 638 601 612.7 安徽 理 566 615 74 653 615 630.1 理 ( 国防生 ) 566 596 12 621 596 607.2 北京 文 516 574 24 605 574 586.3 理 528 593 59 646 596 610.7

More information

Kubenetes 系列列公开课 2 每周四晚 8 点档 1. Kubernetes 初探 2. 上 手 Kubernetes 3. Kubernetes 的资源调度 4. Kubernetes 的运 行行时 5. Kubernetes 的 网络管理理 6. Kubernetes 的存储管理理 7.

Kubenetes 系列列公开课 2 每周四晚 8 点档 1. Kubernetes 初探 2. 上 手 Kubernetes 3. Kubernetes 的资源调度 4. Kubernetes 的运 行行时 5. Kubernetes 的 网络管理理 6. Kubernetes 的存储管理理 7. Kubernetes 包管理理 工具 Helm 蔺礼强 Kubenetes 系列列公开课 2 每周四晚 8 点档 1. Kubernetes 初探 2. 上 手 Kubernetes 3. Kubernetes 的资源调度 4. Kubernetes 的运 行行时 5. Kubernetes 的 网络管理理 6. Kubernetes 的存储管理理 7. Kubernetes

More information

序号:001

序号:001 第 一 组 选 题 简 介 序 号 :001 题 目 : 基 于 BPEL 的 网 上 订 餐 系 统 的 设 计 与 实 现 网 上 订 餐 系 统 是 在 互 联 网 上 进 行 菜 单 信 息 发 布 网 上 订 餐 以 及 维 护 客 户 关 系 的 电 子 商 务 系 统, 餐 饮 企 业 可 以 通 过 这 个 电 子 商 务 系 统 发 布 自 己 的 菜 单 信 息 以 供 客 户

More information

《C#基础入门》课程教学大纲

《C#基础入门》课程教学大纲 ASP.NET 就业实例教程 课程教学大纲 ( 课程英文名称 ) 课程编号 : 学 分 :5 学分 学时 :40 学时 ( 其中 : 讲课学时 :24 上机学时 :16) 先修课程 :C# 程序设计 SQL Server 数据库 网页设计与制作后续课程 : 适用专业 : 信息及其计算机相关专业开课部门 : 计算机系 一 课程的性质与目标 ASP.NET 就业实例教程 是面向计算机相关专业的一门专业实训课,

More information

Android 编程基础 Android 开发教程 & 笔记 1

Android 编程基础 Android 开发教程 & 笔记 1 Android 开发教程 & 笔记 1 多式样 ProgressBar 撰写 : 地狱怒兽 联系 :zyf19870302@126.com 普通圆形 ProgressBar 该类型进度条也就是一个表示运转的过程, 例如发送短信, 连接网络等等, 表示一个过程正 在执行中 一般只要在 XML 布局中定义就可以了

More information

中 文 摘 要 智 慧 型 手 機 由 於 有 強 大 的 功 能, 以 及 優 渥 的 便 利 性, 還 能 與 網 路 保 持 隨 時 的 鏈 結 與 同 步 更 新, 因 此 深 受 廣 大 消 費 者 喜 愛, 當 然, 手 機 遊 戲 也 成 為 現 代 人 不 可 或 缺 的 娛 樂 之

中 文 摘 要 智 慧 型 手 機 由 於 有 強 大 的 功 能, 以 及 優 渥 的 便 利 性, 還 能 與 網 路 保 持 隨 時 的 鏈 結 與 同 步 更 新, 因 此 深 受 廣 大 消 費 者 喜 愛, 當 然, 手 機 遊 戲 也 成 為 現 代 人 不 可 或 缺 的 娛 樂 之 臺 北 市 大 安 高 級 工 業 職 業 學 校 資 訊 科 一 百 零 一 學 年 度 專 題 製 作 報 告 ------ 以 Android 製 作 ------ ----- 連 線 塔 防 遊 戲 ------ Tower defense game using Internet technology 班 級 : 資 訊 三 甲 組 別 : A9 組 組 員 : 葉 冠 麟 (9906129)

More information

用手機直接傳值不透過網頁連接, 來當作搖控器控制家電 ( 電視遙控器 ) 按下按鍵發送同時會回傳值來確定是否有送出 問題 :1. 應該是使用了太多 thread 導致在傳值上有問題 2. 一次按很多次按鈕沒辦法即時反應

用手機直接傳值不透過網頁連接, 來當作搖控器控制家電 ( 電視遙控器 ) 按下按鍵發送同時會回傳值來確定是否有送出 問題 :1. 應該是使用了太多 thread 導致在傳值上有問題 2. 一次按很多次按鈕沒辦法即時反應 專題進度 老師 : 趙啟時老師 學生 : 陳建廷 2013/10/13 用手機直接傳值不透過網頁連接, 來當作搖控器控制家電 ( 電視遙控器 ) 按下按鍵發送同時會回傳值來確定是否有送出 問題 :1. 應該是使用了太多 thread 導致在傳值上有問題 2. 一次按很多次按鈕沒辦法即時反應 程式碼 : package com.example.phone; import java.util.arraylist;

More information

ZYWGML

ZYWGML 21 世 纪 高 职 高 专 教 材 供 中 医 中 西 医 结 合 类 专 业 用 中 医 五 官 科 学 毋 桂 花 主 编 北 京 内 容 简 介 本 书 是 21 世 纪 高 职 高 专 教 材 ( 供 中 医 中 西 医 结 合 类 专 业 用 ) 中 的 一 种, 主 要 论 述 耳 鼻 咽 喉 口 腔 疾 病 及 眼 科 疾 病 的 发 生 发 展 诊 断 治 疗 本 书 的 编 写

More information

WebEx 一键集成 1 文档目的 Web 集成 URL API 语法 启会 加会 调用 移动集成 wbx schema 调用 取得 sessionticket...4

WebEx 一键集成 1 文档目的 Web 集成 URL API 语法 启会 加会 调用 移动集成 wbx schema 调用 取得 sessionticket...4 WebEx 一键集成 1 文档目的...1 2 Web 集成...1 2.1 URL API 语法...1 2.2 启会...2 2.3 加会...3 2.4 调用...3 3 移动集成...3 3.1 wbx schema...3 3.2 调用...4 4 取得 sessionticket...4 1 文档目的 本文档目的是, 让用户了解如何在 Web 端和移动端, 一键调用 WebEx app,

More information

中南大学第二届软件创新大赛

中南大学第二届软件创新大赛 3D 全 息 投 影 游 戏 平 台 参 赛 项 目 计 划 书 一 参 赛 作 品 构 思 的 创 意 与 价 值 1. 背 景 : 问 题 领 域 (1) 手 机 平 台 游 戏 发 展 火 爆 随 着 移 动 设 备 和 移 动 互 联 网 的 飞 速 发 展, 手 机 已 经 成 为 人 们 日 常 生 活 中 的 伙 伴 越 来 越 多 手 机 游 戏 APP 成 为 了 人 们 放 松

More information

郑杭生等 一 杭州市 社会复合主体 的组织创新

郑杭生等 一 杭州市 社会复合主体 的组织创新 年第 期 从社会复合主体到城市品牌网群 以组织创新推进社会管理创新的 杭州经验 郑杭生 杨 敏 多年来 以 让我们生活得更好 的价值共识作为共同行动的基础 杭州经验 通过连续不断的系列创新 对 中国经验 的内核 构建 国家 社会 新型关系 促进 政府 企业 社会 的三维合作 使社会资源和社会机会形成优化配置 给予了独特的探索 最近几年中 杭州经验 从社会复合主体到城市品牌网群的新跨越 对 政府 企业

More information

没 有 多 余 的 Contruol 或 Action 了 原 来 Domain 层 被 服 务 层 Service layer 遮 挡, 在 右 边 图 中, 则 Domain 层 直 接 暴 露 给 前 台 了, 没 有 被 遮 挡, 裸 露 了 这 样 一 步 到 位 实 现 领 域 模 型

没 有 多 余 的 Contruol 或 Action 了 原 来 Domain 层 被 服 务 层 Service layer 遮 挡, 在 右 边 图 中, 则 Domain 层 直 接 暴 露 给 前 台 了, 没 有 被 遮 挡, 裸 露 了 这 样 一 步 到 位 实 现 领 域 模 型 文 章 编 号 :1007-757X(2012)1-0036-04 领 域 驱 动 模 型 的 WEB 软 件 系 统 设 计 研 究 摘 要 : J2EE 3 JDK1.7 Tomcat WEB 关 键 词 : 中 图 分 类 号 :TP311 文 献 标 志 码 :A 0 引 言 Web 软 件 系 统 的 分 层 结 构 典 型 的 J2EE 软 件 系 统 开 发 方 法 分 为 三 层 结

More information

LiveBOS产品白皮书

LiveBOS产品白皮书 面 向 对 象 的 业 务 支 撑 平 台 与 建 模 工 具 * 实 现 应 您 所 需, 随 时 而 变 的 应 用 * 业 务 管 理 应 用 软 件 最 佳 选 择 * LiveBOS 产 品 白 皮 书 LiveBOS 产 品 白 皮 书 福 州 顶 点 信 息 管 理 有 限 公 司 http://www.apexinfo.com.cn Copyright c 2008-2015 版 权

More information