第3 章 网上书城案例 为了更好地说明如何使用Android提供的各种技术开发一个完整的AndroidApp, 本书将提供一个网上书城的开发案例,开发案例的一些具体技术将会在后续的章节中一 一介绍。本章介绍该开发案例的整体功能需求,同时展示该案例开发完成后的预期效果。 开发案例的名称为网上书城,类似于一个网上购物平台,用户可以注册登录、浏览商 品、下单购买;开发案例除了移动端(AndroidApp)的开发之外,还包括服务器端后台接 口的开发,以及数据库的设计和部分数据的装载。通过本章内容的学习,希望读者对接下 来开发的实际案例有初步的了解。 3.1 网上书城需求概述 在动手开发之前,首先对开发案例的需求进行梳理。以下是移动端应用大致要实现 的功能: . 展示书籍(商品)信息,用户可以浏览、查看。 . 搜索、匹配书籍信息,用户可以快速查找。 . 用户可以注册、登录账号、退出账号、修改账号信息。 . 选择书籍下单以及添加购物车下单。 . 查看订单以及订单详情的功能。 . 下单时地址管理。 整个Android应用将会完成以上功能,包含一个购物平台的基本模块,应用涉及的技 术包括网络、数据存储、UI等,这些知识会在后续的章节详细讲述。 移动端(AndroidApp)的数据需要从后台获取,通过向服务器端(Server)发送网络数 据请求,服务器端应用程序会处理相应请求并从数据库(database)获取数据,数据库返回 数据给服务器端,服务器端获取数据之后,程序会对获取到的数据进行处理,然后返回处理 结果给发送请求的移动端,这是一个简单的网络请求与响应过程,整个过程如图3.1所示。 在网上书城的案例开发中,服务器端选择Java语言进行开发,主要是考虑到Java在 服务器端的应用广泛,目前市场上很多大型项目都是用Java完成后台开发的。Java有大 量可用的组件库,特别是Spring框架的出现,使得JavaWeb开发更加简单、方便。数据 库管理系统(Database ManagementSystem,DBMS)采用了关系型数据库MySQL, MySQL使用的SQL是用于访问数据库的最常用的标准化语言。MySQL成本低、可靠 性好、性能高,是目前流行的开源数据库。 第 3 章 网上书城案例 49 图3.网上书城App 及服务器整体架构 1 3.网上书城App 案例展示 2 软件开发一般是根据产品原型进行的,产品原型展示了基本的界面信息,以及界面的 交互逻辑,通过产品原型将大致的界面及内容写好,界面的美化需要根据UI 的设计图更 改,这里直接展示Android应用程序的截图,根据实际的成品开发。 图3.2所示是网上书城应用程序的首页,最上面是网上书店的标题、图标、购物车,接 下来是搜索框、轮播图,3展示的是左侧的侧滑栏, 最后是展示商品的列表。图3.包含登 录状态、首页、我的订单、我的账户和收货地址。 图3.2 App 首页图3.首页侧滑栏 3 图3.4与图3.5分别是登录界面和创建新账户界面,从侧滑栏界面单击“你好,登录” 就可以进入登录界面,登录界面要获取用户手机号码、密码。在登录界面单击“创建新账 50 移动应用开发技术 户”按钮可进入创建账户界面,创建账户界面需要用户输入姓名、用户手机号以及创建密 码。两个页面都有“显示密码”的复选框,勾选该项后能展示输入的密码。 图3.登录界面图3.创建账户界面 45 图3.6和图3.7是书籍详细信息界面,展示了书籍的基本信息与介绍,包括价格、描 述、商品特点&基本信息等。 图3.书籍详细信息界面 1 图3.书籍详细信息界面2 67 第 3 章 网上书城案例 51 图3.8所示是购物车界面,展示了加入购物车的书籍列表信息,单击“去结算”按钮会 跳转到地址选择界面,单击“ 按钮会将选中的书籍从购物车中清除;9所示, 删除” 如图3. 地址选择界面展示了收货人的信息,可以单击“编辑”按钮修改收货地址信息,或单击“去 支付”按钮跳转到结算界面,若单击“删除”按钮,则需要重新填写收货地址,填写完成后单 击“保存”按钮后才能去结算。 图3.购物车界面图3.地址选择界面 89 图3.10 所示是编辑地址界面,通过该界面可以修改收货人的信息。图3. 面,单击“确认支付”按钮会生成订单。 11 是结算界 图3.编辑地址界面图3.结算界面 10 11 52 移动应用开发技术 图3.展示了用户的基本信息, 编 12 为账户信息界面, 如图3. 这里可以退出登录状态。单击“ 辑”按钮可进入信息修改界面, 13 所示。 图3.账户信息界面图3.信息修改界面 12 13 最后是订单列表页,如图3.从这里可以查看所有提交的订单, 14 所示, 以及订单详情 页。图3.可以查看订单详情。 15 是订单详情页面, 图3.订单列表界面图3.订单详情界面 14 15 第3 章 网上书城案例 53 以上基本包含了网上书城应用程序的相关界面,整个应用程序的功能并不是很复杂, 主要内容在于网络通信、UI布局以及相关的业务逻辑的编写。 3.3 主要技术与框架 网上书店应用程序的开发会用到一些基本知识,如四大组件中的Activity、许多UI 控件(如Button、TextView、EditText、ListView 等)、Intent 意图、数据存储 SharedPreferences,以及第三方开源框架,虽然Android原生开发已经相当成熟,但是在 开放源代码框架盛行的今天,有许多第三方开源框架和库可以使用,如OkHttp,它们极 大地提升了开发的效率。 首先是轮播图的开源库RollViewPager,这是一个自动轮播的ViewPager,支持无限 循环,触摸时会暂停播放,指示器可以为点或数字,还可以自定义,位置也可以改变,可以 设置轮播的时间间隔等,在网上书店的首页将会用到。 Picasso是一款优秀的Android图片加载框架,它有以下特征:自动检测适配器,重 新使用并取消以前的下载;转换图像,以更好地适应布局并减少内存大小;支持错误占位 符作为可选功能;使用Picasso极大地简化了图片加载的方式,它最简单的方式如下: Picasso.with(context).load(url).into(imageView); 网络请求的框架使用了OkHttp,这是目前最火热的轻量级网络访问开发框架。 OkHttp有许多优势,如允许连接到同一个主机地址的所有请求,提高请求效率;共享 Socket减少对服务器的请求次数;通过连接池,减少了请求延迟,缓存响应数据减少重复 的网络请求;除了OkHttp,还会讲解GoogleVolley的使用,这是在2013年GoogleI/O 大会上推出的一个Android网络通信框架,相对于HttpURLConnection更简单、网络通 信更快。 这些开源框架在GitHub开源社区都可以找到,上面有这些开源库的源码,GitHub 是一个免费的远程仓库,也是一个开源协作社区,通过GitHub,既可以让别人参与你的开 源项目,你也可以参与别人的开源项目。GitHub上有许多这样的项目,如果有兴趣,可 以看一些热门的开源项目,对自己的技术提升也是有帮助的。 3.4 数据库设计 服务器端应用程序的开发需要先设计数据库,然后再进行开发。一个良好的数据库 设计能保证开发顺利进行,如果一个表设计得不合理,当后期需求变更频繁时,更改表设 计会变得一筹莫展。 使用MySQL数据库系统时,应根据合理的场景选择最优的存储引擎,通常选择 InnoDB。如果在可以不考虑事务处理以及可以承受崩溃恢复代价的情况下,需要更好的 读操作性能,可以选择MyISAM,因为MyISAM 读数据的性能比InnoDB好。 字段的设计应该遵循以下原则: 54 移动应用开发技术 (1)尽量选择最小的数据类型,这样能使磁盘、内存和CPU占用更少,例如一个状态 值只有0和1两种状态,则选用tinyint,长度为1。 (2)字段的设计尽量避免NULL,因为NULL会让MySQL的处理程序变得复杂,通 常用0或者非NULL的合理默认值。 当然,这个项目的数据库设计不用考虑那么多,不过上述知识在以后的工作中可能会 用到,很多设计需要自己在实践中了解与完善。在设计数据库时,可以参考一些已经成熟 的数据库设计,想一想他们为什么这样设计,这也可以避免走一些弯路。 现在开始数据库设计、建表。这里推荐一个连接数据库的前端工具———Navicat,这 是一套快速、可靠的数据库管理工具,专为简化数据库的管理以及降低系统管理成本而 设,可以对本机或远程的MySQL 、SQLServer、SQLite、Oracle以及PostgreSQL数据库 进行管理和开发。 下载后安装,打开软件,单击左上角的“连接”按钮,如图3. 16所示。 图3.t主界面 16 Navica 选择MySQL,弹出新建连接信息窗口, 17所示。 如图3. 在“常规”选项卡中填写相关信息;连接名只是一个名称,这里填local,主机名或者IP 地址填localhost,表示本机地址,端口为3306,用户名和密码是本机安装MySQL设置的 用户名和密码(确保本机已经完成MySQL的安装和配置)。 填写完成之后,单击“连接测试”按钮,如果连接失败,则需要检查本机MySQL的安 装是否成功,如果提示连接成功,单击“确定”按钮回到首页,可以看到左边增加了一个叫 local的连接,双击它就可以连接到本地数据库了。 选择local右击,在弹出的快捷菜单中选择“新建数据库”,新建的数据库名叫作 amazon,字符集选择utf8- UTF-8Unicode,排序规则选择utf8_general_ci,单击“确定” 按钮,如图3. 18所示。 打开amazon数据库,选中表右击,从弹出的快捷菜单中选择“新建表”,开始创建数 55 第 3 章 网上书城案例 据表user(用户表)、orders(订单表)、orderdetails(订单详情表)、cart(购物车表)、addres (地址表)、k( 数据库中各表的详细信息如图3.24所示。 boo书籍表), 19~图3. 图3.新建连接信息窗口 17 图3.新建数据库 18 完成表的字段设计后,接下来完成表关系连接。数据库外键关联如图3. 25所示, user表的u_id与addres 的u_id关联,并与orders的u_id关联,orders的o_id与 orderdetails的o_id关联,orderdetails的b_id与book的b_id关联。 56 移动应用开发技术 图3.r表 19 use 图3.s表 20 order 图3.s表 21 orderdetail 图3.t表 22 car 第 3 章 网上书城案例 57 图3. s 表 23 addre 图3. 24 bok表 图3.数据库外键关联 25 58 移动应用开发技术 接下来在数据库中填写一些测试数据,包括user信息表、book信息表(一)、book信 息表(二)、addres 信息表、orders信息表以及orderdetails信息表,如图3.31 26~图3. 所示。 图3.r信息表 26 use 图3.一) 27 bok信息表( 图3.二) 28 bok信息表( 第 3 章 网上书城案例 59 图3. s 信息表 29 addre 图3.s信息表 30 order 图3.s信息表 31 orderdetail 以上就是数据库的基本介绍与建表设计,完成这些准备工作后,就可以开始进行开 发了。 3.创建网上书城项目 5 打开AndroidStudio,创建一个新项目,项目名称为bookstore,包名为buu. bookstore.android,如图3.单击Nex 32所示,t按钮。 60 移动应用开发技术 图3.创建项目界面 32 选择最低适配版本,这里选择API21:And0, 33 所示,t按钮, roid5.如图3.单击Nex 选择默认配置,一直单击Next按钮,最后单击Finish按钮即可。项目创建好之后,相关 的内容会在后面的章节穿插讲解。 图3.选择目标Ad设备界面 33 ndroi 第 3 章 网上书城案例 习题 3 61 1. 结合本章内容,说明具备网络访问功能的Android应用程序与服务器(包括后台 使用的数据库系统)之间的关系。 2. 服务器在返回给Android应用程序数据时,数据一般采用什么格式存储并传输? 3. 对于第2题中的数据格式,采用什么技术方法或第三方工具包解析? 4.Android应用程序通过网络服务器时,一般使用什么网络协议? 5. 对于大多数商业应用系统(如京东、饿了么等), 一般可以通过浏览器和手机端应 用程序(包括Android、iOS 等平台)访问。二者访问的服务器程序是各自独立地重复开 发,还是能够共享地仅开发一次即可?