基于Android的宠物商城互动平台《Pap》的设计与应用
2018-07-20叶建林陈锐植吴秋坤方灿坤林均涛
叶建林 陈锐植 吴秋坤 方灿坤 林均涛
摘要:现如今,随着人们生活水平提高,宠物在人们心中的地位也越来越高。伴随着Android和iOS移动平台的普及,人们对服务于他们的爱宠的APP的需求也越来越大。伴随线下实体店的宠物美容和用品店之间竞争的增加,实体店老板们对于打通线上销售的渠道的需求也越来越大。综合以上原因,团队设计开发这么一款将宠物,宠物主人和宠物美容店三者紧紧联系在一起的APP。根据软件工程的相关知识,在需求分析的基础上,设计了系统总体架构及功能。使用Java语言和Android Studio开发工具开发App,运用Service和Intent实现页面的跳转,Share Preference和SQLite实现商品的数据中心,最后将产品UI、界面控制和数据库整合,通过运行和测试。这款APP不但可以解决宠物主人不知去哪为爱宠美容的问题,而且提供给了宠物优质生活用品和提高了宠物美容店和用品店的营收。而且通过测试表明,该APP为用户解决了相应的难处,并给用户的日常生活带来了更多的便利和更好的体验。
关键词:Android;Servlet;宠物服务;网上商城;移动APP
中图分类号:TP393 文献标识码:A 文章編号:1009-3044(2018)13-0100-04
The Design and Application of Pap, an Interactive Platform Based on Android
YE Jian-lin, CHEN Rui-zhi, WU Qiu-kun, FANG Chan-kun, LIN Jun-tao
(Xinhua College of Sun yat-sen University, Dongguan 512133, China)
Abstract: Nowadays, with the improvement of people's living standards, pets have a higher and higher status in people's hearts. With the popularity of Android and iOS mobile platforms, there is a growing demand for apps that serve their loved ones. With the increase in competition between the pet grooming and supply stores in offline stores, physical store owners are increasingly demanding access to online sales. For the above reasons, the team designed and developed an APP that connects pets, pet owners and pet beauty stores. Based on the knowledge of software engineering, the overall architecture and function of the system are designed on the basis of demand analysis. Using the Java language and Android Studio development tool App, use the Service and the Intent to realize the jump of the page, Share Preference and SQLite data center for their goods, finally the product UI, interface control and database integration, by running and testing. The APP will not only solve the problem of pet owners not knowing where to go for beauty, but also provide the pet with quality living products and increase the revenue of pet beauty shop and store. Moreover, the test shows that the APP solves the corresponding difficulties for users and brings more convenience and better experience to users' daily life.
Key words: Android; Servlet; Pet service; Online mall; Mobile APP
1 背景
根据中国产业信息网资料显示,2015年中国宠物行业市场规模约为978亿元,到2020年有望突破2000亿元,2010-2020这十年增长期的年均复合增长率预计可达32.8%。而根据中国产业信息网资料显示,2016年全球手机出货量为14.7 亿部,预计2017年和2018年全球手机出货量分别为15.2亿和15.8亿部,未来几年复合增速在3.5%左右。在宠物行业市场和手机行业市场良性发展的大背景下,现实生活当中,有着许多的因主人临时外出而宠物无人看管的场景。比如,某白领王某因公出差而家里的爱宠无人抚养,所以急迫寻找可以代劳的人。其次,爱宠人士一定会为其爱宠的食物质量是否安全健康有保障而担忧。另外,爱宠们的主人们还会为寻找到可以给自己的爱宠修剪指甲、整理毛发、清洁全身、购买漂亮的小衣物的地方而发愁。
2 系统分析
2.1 系统目标
为解决现实生活中存在的各种宠物与人之间的常见的生活上的各种问题,Pap宠物商城交流互动平台需要以技术为主,必须开發出相应的计算机平台系统。该平台系统主要包括以下组成部分:服务器端,接收客户端所有请求,同时提供数据存储服务;客户端,提供用户注册、登录、发布寄养信息、接收寄养信息以及商城购物等功能。
2.2 系统功能
宠物商城交流互动平台Pap的主要功能有:发布寄养信息、接收寄养信息、完成寄养和商城购物。如图1。
注册登录:为确保每个用户的信息的完整性,用户除填写账号密码外还需要提供手机号码、通讯地址和邮箱等信息进行注册。注册时将会提交数据到Pap的服务器端,然后服务器端校验数据库中是否存在相同的账号信息。如若信息匹配相同则不通过,反之注册登录成功。
发布寄养信息:注册登录后便可发布寄养信息,在填写好相关信息,如宠物名字、寄养天数、寄养酬劳和备注等信息后便可以发布了。
接收寄养信息:注册登录后便可接收寄养信息,在根据自身实际情况,在寄养栏选定合适的寄养订单后,便可以接下寄养信息了。
商城购物:注册登录后便可以通过购物栏进行商品的浏览,加入购物车或者立即购买。
3 系统设计
3.1 宠物商城互动平台关键抽象
关键抽象是概要设计的不,即将需求模型中的关键实体以及实体之间的关系识别并抽取出来,亦即领域模型,如图2所示为宠物商城互动平台的关键抽象。
3.2 宠物商城互动平台架构描述
该平台系统采用了 MVC(Model-View-Controller)设计模式,实现一个典型的三层架构模型。三层模型包括:表示层(UI 层),业务逻辑层以及数据访问层。
1)表示层
表示层负责接收用户的命令,交给控制层处理,并显示处理结果。实现上,我们将采用 J2SE 的 SWING 框架,则表示层主要由一系列的窗体和控件组成。监听器的功能是对用户的输入进行监听,并调用控制层提供的接口进行数据传递。
2)业务逻辑层
业务逻辑层是系统的核心组成部分。管理所有系统功能有关的数据流和控制流,从而实现系统的逻辑功能。向上提供服务接口给表示层调用。在控制层中,不同的子系统提供独立的服务接口,各自独立实现,互不干预影响。
3)数据访问层
数据访问层是包括了数据实体和持久化逻辑实现,并向上提供接口。属于不同子系统的数据实体放置在不同的包中。而持久化逻辑统一实现,本系统将采用轻量级的嵌入式数据库derby,其优点是小巧方便,客户机上无需进行复杂的数据库服务器的安装和配置。持久化逻辑可以采用不同的实现,不同的子系统不规定要使用同一个持久化逻辑。
3.3 界面流程设计
宠物商城互动平台Pap的界面流程设计如图3所示。
4 系统实现
宠物商城互动平台Pap采用C/S架构,它由客户端和服务器端两个部分组成。
4.1 客户端应用程序
客户端采用Java编写以及Android studio来开发。采用MVC(Model-View-Controller)设计模式,网络请求通过Http Client类实现,本地数据存储则通过Shared Preference类实现。宠物商城互动平台实现如图4所示。
Pap当中的主要功能发布寄养信息是通过发送http请求到服务端,然后再从服务端返回数据到客户端来实现的。其中主要通过线程类Thread提交数据到服务端,然后通过JSON Array解析数据集合取出消息对象,最后通过List View展示数据。代码如下:
提交数据给服务端:
new Thread(new Runnable() {
@Override
public void run() {
BasicNameValuePair bnvp0 = new BasicNameValuePair("uid",Constant.user.getUserid()); //userlist.get(0).getUerid().toString()
BasicNameValuePair bnvp1 = new BasicNameValuePair("brand",EtBrand.getText().toString());
BasicNameValuePair bnvp2 = new BasicNameValuePair("price",EtPrice.getText().toString());
BasicNameValuePair bnvp3 = new BasicNameValuePair("des",EtDes.getText().toString());
BasicNameValuePair bnvp4 = new BasicNameValuePair("dic",imagepath);
BasicNameValuePair bnvp5 = new BasicNameValuePair("pic",imageName);
BasicNameValuePair bnvp6 = new BasicNameValuePair("bcount","0");
String response = UploadByServlet.post(url,bnvp0,bnvp1,bnvp2,bnvp3,bnvp4,bnvp5,bnvp6);
Message msg = new Message();
msg.obj = response;
msg.what = 1;
handler.sendMessage(msg);
}
}).start();
发送数据给客户端:
public List
List
String response = getByServlet(url); //获取list
try{
JSONArray ja = new JSONArray(response);
for(int i = 0;i < ja.length(); i++) {
JSONObject jo = ja.getJSONObject(i);
Fosterage fosterage = new Fosterage();
fosterage.setId(jo.getInt("id"));
fosterage.setTitle(jo.getString("title"));
fosterage.setDes(jo.getString("des"));
fosterage.setPrice(jo.getDouble("price"));
fosterage.setDic(jo.getString("dic"));
fosterage.setPic(jo.getString("pic"));
fosterage.setAddress(jo.getString("address"));
fosterage.setDay(jo.getString("day"));
fosterage.setDate(jo.getString("date"));
fosterage.setUid(jo.getString("uid"));
mylist.add(fosterage);
}
}catch(Exception e){
e.printStackTrace();
}
return mylist;
}
4.2 后臺服务器端实现
客户端应用程序主要通过WiFi或3G、4G网络连接方式连接到Web服务器端。客户端通过http请求将相关参数传输到服务器端(数据采用AES双向加密传输),服务器端接收数据后进行业务逻辑处理,对数据库的数据根据相应的操作进行增删改查,并将查询结果以JSON数据格式返回给客户端。服务器端则采用了Servlet提供后台服务和管理。其中,Servlet用于接收服务器请求,并将处理后的响应内容传给服务器,由服务器将响应内容返回给客户端。服务器端是部署在腾讯云上,数据采用MySQL数据库存储。
Servlet是Java Servlet的简称,称为服务连接器,用Java语言编写的服务器端程序,主要功能在于交互式地浏览和修改数据,生成动态Web内容。在本系统中,服务器端应用程序使用Servlet的do Post方法返回JSON数据给客户端。代码如下:
protected void doPost(HttpServletRequest request,HttpServletResponse response)throws ServletException, IOException{
String state1 = "";
request.setCharacterEncoding("utf-8");
String uid = request.getParameter("uid");
String name = request.getParameter("name");
String price1 = request.getParameter("price");
String des = request.getParameter("require");
String day = request.getParameter("day");
String date = request.getParameter("date");
String address = request.getParameter("address");
String dir = UploadServlet.getPath();
String pic = UploadServlet.getName();
double price = Double.parseDouble(price1);
DBUtil dbutil = new DBUtil();
state = dbutil.setFosterageState(uid, name, price,des, pic, dir, day,date);
state1 = String.valueOf(state);
OutputStream os = response.getOutputStream();
os.write(state1.toString().getBytes());