第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 等平台)访问。二者访问的服务器程序是各自独立地重复开
发,还是能够共享地仅开发一次即可?