《基于android的手游应用商店的设计与实现学士学位论文.doc》由会员分享,可在线阅读,更多相关《基于android的手游应用商店的设计与实现学士学位论文.doc(49页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、基于Android的手游应用商店的设计与实现基于Android的手游应用商店的设计与实现 摘 要 随着科技的发展,二十一世纪成为了以网络化,信息化为核心的社会。网络商业化也成为了时下最热门的词汇。随着信息技术的不断更新,特别是07年谷歌公司推出了Android开放源码,让Android操作系统成为了移动平台的宠儿。本系统主要是针对Android移动平台,为广大使用群体提供手游(手机游戏)的下载,让用户能够体验最新、最热门的手游,并从中获得快乐。本设计是一个基于Android手机的手游应用商店,并采用C/S作为开发模式。本文从系统需求、系统实际、代码实现几个方面介绍了整个软件的开发过程,这个系统
2、采用JAVA、MySQL数据库,并利用MyEclipse、TOMCAT、Android SDK、ADT、AVD、DDMS等开发环境或者开发工具。关键词:Android、Java、MyEclipse、SQLite、MySQL。The Design and Implementation of Android-based Mobile Games App Store AbstractWith the development of science and technology of the twenty-first century to become a network, information as
3、 the core of society. Commercial network has also become the hottest vocabulary. With the continuous updating of information technology, especially in 2007 Google launched the Android open source, so that became the darling of the Android operating system for mobile platforms. The system is mainly f
4、or the Android mobile platform, for the majority of user groups provide mobile game download, allowing users to experience the latest and most popular mobile games, and derive pleasure.The design is an Android-based mobile phone application store tour hands, and using C / S as a development model. F
5、rom the system requirements, the system actually, code describes several aspects of the software development process, this system uses JAVA, MySQL database, and using MyEclipse, TOMCAT, Android SDK, ADT, AVD, DDMS, such as the development environment or development tools .Keywords: Android, Java, My
6、Eclipse, SQLite, MySQL.目 录摘 要I第一章 绪论11.1 开发背景11.2 开发目的11.3 主要内容1第二章 系统理论与技术1第三章 系统分析与设计13.1 功能需求13.1.1 客户端13.1.2 服务端23.1.2功能模块图23.2 模块结构与流程33.2.1 客户端33.2.2 服务端73.3 数据库设计113.3.1 数据库表及其结构113.3.2 数据123.3.3 客户端数据库的连接123.3.4 服务器数据库的连接143.4 系统结构143.4.1 部署图143.4.2 类图143.5 执行概念16第四章 系统实现164.1 Android环境搭建164
7、.2 客户端184.2.1 用户登录184.2.2 用户注册204.2.3 游戏浏览224.2.4 游戏下载254.2.5 软件管理274.3 服务端294.3.1 响应客户端登录请求294.3.2 用户信息管理32第五章 结束语34致谢35参考文献36IV第一章 绪论1.1 开发背景1.2 开发目的1.3 主要内容第二章 系统理论与技术第三章 系统分析与设计3.1 功能需求随着3G时代的到来,手机应用越来越普遍,加之国民手机持有量更是爆炸式增长。为了方便Android手机用户能随时随地下载手游,获取手游咨询,于是提出本系统的主要功能。3.1.1 客户端1、界面 1)登录、注册界面2)左侧菜单
8、界面3)手游列表查看界面4)手游详情查看界面5)手游文件管理界面2、功能 1)实现客户端与服务器之间的连接2)实现登录、注册功能3)实现手游信息列表展示功能,并能断点下载手游4)实现手游搜索功能5)实现手机软件的卸载功能6)实现客户端自动更新功能7)实现对手游的评价功能3.1.2 服务端1、界面 1)管理员登录界面 2)用户、手游、评价的信息管理界面2、功能 1)向客户端提供用户、手游列表、以及评价列表信息2)实现添加、删除、修改客户端用户信息3)实现添加、删除、修改手游信息4)实现添加、删除、修改手游评价信息3.1.3功能模块图功能模块图如3-1所示:图3-1功能模块图3.2 用例解说3.2
9、.1用户用例解说主要参与者用例用户1.客户端用户用户1. 用户注册2. 用户登录客户端3. 查看手游列表信息4. 查看手游详情5. 查看评论6. 发表留言7. 下载手游8. 卸载应用用例ID号UC-1用例名称用户注册参与者用户描述用户进入客户端首页,打开菜单并点击注册前置条件用户进入注册界面后置条件用户按照要求填写相关注册信息主干过程1. 用户进入首页2. 打开左侧菜单,点击注册分支过程a) 用户进入客户端1.1填写注册信息1.2点击注册优先级中使用频率需要积分的应用注册并登录才能下载特别需求注意和问题用例ID号UC-2用例名称用户登录参与者用户描述用户登录进入客户端前置条件用户已进入客户端后
10、置条件主干过程1. 登录分支过程b) 进入登录界面1.填写登录信息2.点击登录优先级中使用频率需要积分手游必须登录才能下载特别需求注意和问题用例ID号UC-3用例名称查看手游列表信息参与者用户描述用户进入客户端后,查看手游列表信息前置条件后置条件主干过程1. 查看手游列表信息分支过程c) 查看手游列表信息1. 进入客户端2. 用户选择查看不同类别的手游优先级低使用频率高特别需求注意和问题用例ID号UC-4用例名称查看手游详情参与者用户描述用户进入客户端,点击一个手游前置条件用户进入客户端后置条件主干过程1. 用户查看手游列表2. 点击手游进入手游详情界面分支过程d) 用户查看手游列表1.用户查
11、看手游列表2.用户选中一个手游3.进入手游详情界面优先级中使用频率高特别需求注意和问题用例ID号UC-5用例名称查看评论参与者用户描述前置条件用户已进入手游详情界面后置条件主干过程1. 进入详情界面2. 点击评论按钮进入查看评论分支过程e) 查看手游的评论信息 1.进入手游的详情界面2.点击评论按钮,进入评论信息界面优先级高使用频率特别需求注意和问题用例ID号UC-6用例名称发表评论参与者用户描述用户点击评论按钮后,弹出发表评论的对话框前置条件打开发表评论的对话框后置条件主干过程1. 点击评论按钮2. 弹出评论对话框分支过程f) 用户发表评论1. 点击评论按钮2. 打开评论对话框3. 填写评论
12、信息4. 点击发表按钮5. 完成评论发表优先级中使用频率特别需求注意和问题用例ID号UC-7用例名称下载手游参与者用户描述用户点击手游列表以及详情界面中的下载按钮开始下载手游前置条件后置条件主干过程3. 用户点击下载按钮分支过程g) 下载手游1.用户点击下载按钮2.需要积分的手游需要先登录,在用户积分足够的情况下可以下载手游3.在点击下载按钮后按钮上显示暂停,用户再次点击后可暂停手游下载4.用户在下载管理界面可以对下载中的手游进行暂、继续以及删除等操作优先级高使用频率特别需求需要积分的手游需在登录并积分足够的情况下才能下载注意和问题用例ID号UC-8用例名称下载应用参与者用户描述用户进入应用卸
13、载界面,卸载选中的应用前置条件后置条件主干过程4. 用户卸载应用分支过程h) 应用卸载1.用户进入应用卸载界面2.选中需要卸载的应用3.点击卸载按钮4.卸载选中的应用优先级低使用频率特别需求注意和问题3.2.2 管理员用例解说主要参与者用例管理员2.服务端管理员管理员1. 登录2. 客户端用户信息的增加、删除3. 手游信息的增删查改4. 手游评论信息的删除用例ID号UC-1用例名称管理员登陆参与者管理员描述管理员通过系统所预设的账号和密码登录系统前置条件管理员账号和密码后置条件主干过程1. 管理员登陆分支过程a) 管理员登陆1.1填写账号、密码1.2登录系统优先级高使用频率特别需求注意和问题用
14、例ID号UC-2用例名称客户端用户信息的增加、删除参与者管理员描述登录系统后,在管理模块中添加、删除用户前置条件管理员登陆系统后置条件主干过程2. 管理员登陆分支过程b) 管理员登陆1.1添加、删除用户1.2退出系统优先级高使用频率特别需求注意和问题用例ID号UC-3用例名称手游信息的增删查改参与者管理员描述登录系统后,在手游信息管理模块中对信息进行增删查改前置条件管理员登陆系统后置条件主干过程1. 添加、删除、修改、查询手游信息分支过程a) 添加、删除、修改、查询手游信息1.1 登录系统1.2 进入管理界面1.3 更新信息1.4 退出系统优先级高使用频率特别需求注意和问题用例ID号UC-4用
15、例名称删除留言参与者管理员描述管理员可以登陆后通过管理模块处理用户留言前置条件管理员已经登录系统后置条件主干过程5. 登录系统6. 删除留言分支过程b) 删除留言1.登录系统2.删除留言3.退出系统优先级低使用频率特别需求使用系统功能必须登录注意和问题3.3 模块结构与流程3.3.1 客户端客户端概要设计如表3-1:客户端模块简要说明登录模块在连接上服务器的前提下登录成功注册模块在连接上服务器的前提下注册成功手游浏览模块从服务器中读取数据,并把数据封装显示在手游列表中手游评价信息浏览模块从服务器中读取数据,并把数据封装显示在手游评价列表中手游搜索模块向服务器发送请求数据并获取返回数据,然后把数
16、据封装显示在手游搜索列表中自动更新模块从服务器中读取最新版本的数据,与本地进行比较,提示用户更新手游下载模块使用多线程断点技术,从服务器下载手游表3-1 客户端概要设计表图3-2 客户端登录注册模块流程图图3-3 客户端版本更新模块流程图图3-4 客户端手游下载模块流程图图3-5 客户端整体流程图3.3.2 服务端服务端概要设计如表3-2:服务端模块简要说明向客户端提供数据接收客户端的请求数据,然后向客户端发送相对应的数据管理员登录只有指定用户才能进行登录本服务端信息管理系统客户端用户信息增删查改提供客户端用户信息的增加、删除、查询、修改的功能手游信息增删查改提供手游信息的增加、删除、查询、修
17、改的功能手游评价信息增删查改提供手游评价信息的增加、删除、查询、修改的功能表3-2 服务端概要设计表图3-6 服务端登录模块流程图图3-7 服务端向客户端提供数据模块流程图图3-8 服务端数据管理模块流程图3.3 数据库设计数据库结构组织和数据库文件设计要根据不同用途,使用要求等,来决定数据库的整体组织形式等一系列问题。 数据库,顾名思义,是存放数据的仓库,只不过这个仓库是在计算机存储设备上的,而且数据是按一定格式存放。数据库中的数据按一定模型组织描述和存储。具有较小的重复度,较高的数据独立性和易扩张性,并且可以被一定范围内的各种用户共享。在涉及数据库的软件开发中,需要根据有待解决的问题性质,
18、规模,以及所采用的前端程序创建工具等。做出合适的数据库类型选择。 在该项目中建立了两个数据库,客户端和服务器各一个,用这种设计方式主要是为用户减少许多不必要的流量浪费,如果只创建一个服务器数据库的话,用户每次连接上服务器时都会将服务器的所有资源全部接受一遍,但是事实上该项目并不需要实时的更新数据,因为有些菜品的信息可能很久都不会有变动,所以考虑在客户端也创建一个数据库把服务器端发送过来的数据存储在本地数据库中,当服务器有更新时只需要传递改变的数据就可以实现更新。3.3.1 数据库表及其结构客户端数据库(SQLite)DownloadInfo表:编号,文件名,包名,图标链接,下载链接,下载进度,
19、文件长度,文件详细信息链接,文件存储路径。服务端数据库(MySQL)User表:编号,头像链接,用户名,性别,生日,手机,邮箱,等级,经验, 金币,注册时间,礼包数,收藏数,评论数。Game表:编号,标题,图标链接,包名,版本号,评价等级,描述,金币数, 奖励金币数,游戏类别,文件大小,下载数量,下载链接,详情编 号,作者编号。GameDetail表:编号,标签,详情图片链接,评论链接;Author表:编号,姓名,作者链接。Comment表:编号,评分,评论内容,评论日期,手游编号,评论者编号。3.3.2 数据系统E-R(实体-联系)图用来描述数据关系模型,可以用来建立数据模型。本系统共有6个
20、实体,其关系如图3-9所示。图3-9 手游应用商店实体关系图3.3.3 客户端数据库的连接客户端的数据库创建代码如下所示:public class FileDownDBOpenHelper extends SQLiteOpenHelper private static final String DBNAME = wormhelp.db;private static final int VERSION = 1;public FileDownDBOpenHelper(Context context) super(context, DBNAME, null, VERSION);Overridepub
21、lic void onCreate(SQLiteDatabase db) db.execSQL(CREATE TABLE IF NOT EXISTS + FileDownColumns.TABLE_NAME_FILEDOWN+ (_id integer primary key autoincrement, +FileDownColumns.NAME+ varchar(100), +FileDownColumns.FILENAME+ varchar(100), +FileDownColumns.PACKAGENAME+ varchar(100), +FileDownColumns.ICONPAT
22、H+ varchar(100), +FileDownColumns.DOWNPATH + varchar(100), +FileDownColumns.FILESAVEPATH + varchar(100), +FileDownColumns.FILELENGHT + INTEGER, +FileDownColumns.DETAILURL + varchar(100), +FileDownColumns.PROGRESS+ INTEGER );Overridepublic void onUpgrade(SQLiteDatabase db, int oldVersion, int newVers
23、ion) db.execSQL(DROP TABLE IF EXISTS + FileDownColumns.TABLE_NAME_FILEDOWN);onCreate(db);客户端数据库链接代码(主要代码)如下所示:3.3.4 服务器数据库的连接3.4 系统结构本系统采用HTTP协议来进行数据传输。采用C/S结构,客户端为基于Android操作系统平台的智能手机,主要的业务逻辑则服务器端来实现,数据存储在数据库服务器3.4.1 部署图系统部署如图3.7所示,客户端采用基于Android操作系统平台的智能手机,服务器端包括服务器、图形界面化工具和数据库服务器,主要处理业务逻辑和对数据的增删改
24、查。 图3-10 系统部署图3.4.2 类图根据已建立的用例图确定要建立的对象类并确定属性和操作。通过检查类的定义,分析问题的需求和运用该领域知识来确定类的属性。根据系统功能需求和系统设计需要确定类的操作,本系统有6个实体类,分别为下载信息实体类(DownloadInfo)、用户实体类(User)、评论实体类(Comment)、手游实体类(Game)、手游详情实体类(GameDetail)、手游作者实体类(Author),如图3-11所示。图3-11 实体类图3.5 执行概念本系统时序图如图3-12所示:图3-12 时序图1、 客户端发送请求给服务器,服务器的后台Action负责处理数据。 2
25、、 服务器业务逻辑处理会调用Service,进行数据处理。 3、 Service调用Dao,Dao把数据保存到数据库DB中。 4、 DAO返回结果给Service,Servie进行数据处理后将结果返回给Action。 5、 Action把结果返回给客户端。第四章 系统实现4.1 Android环境搭建任何事物要运行,都要有它的环境,Android也有它的环境才能够运行,下面介绍Android的开发环境配置. 搭建开发环境需要的软件: 1. 操作系统:Windows 7或Linux2. 软件包:Android SDK(Software Development kit Java Developme
26、nt kit) 、ADT(Android Develoopment Tool)3. DE环境:Eclipse IDE+ADT Eclipse3.3以上4. JDK:Java Runtime Environment虚拟机 、(JDK)Java Development kit 5. 安装Android SDK:首先要下载SDK,可以在这个网址下载Http:/ ,如图4-1,选择相应的系统进行安装图4-1 SDK下载6. 安装Android ADT插件 运行Eclipse,选择help-install new software 选择add,将会弹出一个框,如图4-2 所示图4-2 ADT的安装4.2
27、 客户端4.2.1 用户登录用户登录界面如下:图4-3 手游商店登录界面登录代码(主要部分):/先判断用户名和密码是否为空,然后向服务器发送登录请求.判空处理.Overrideprotected Map getParams() throws AuthFailureError Map map = new HashMap();map.put(name, name);map.put(pass, pass);return map;/从服务器获取返回结果后,客户端进行处理private void handleLoginInfo(LoginInfo info) if (info = null) WormT
28、oast.shortToast(getApplicationContext(), Rwork_wrong);return;/将登录状态记录下来PreferenceUtil.setPrefInt(getApplicationContext(), PreferenceUtil.USER_LOGIN_STATE, info.getState();if (info.getState() = LoginInfo.LOGIN_STATE_FAIL) WormToast.shortToast(getApplicationContext(), R.string.login_login_fail); else
29、if (info.getState() = LoginInfo.LOGIN_STATE_SUCCESS) MyApplication.sUserInfo = info.getUserInfo();/登录成功后,返回到主界面setResult(RESULT_OK);finish();4.2.2 用户注册注册界面如下:图4-4 注册界面注册代码(主要部分): /先进行字段判空等处理,然后向服务器发送注册请求 .判空处理.Overrideprotected Map getParams() throws AuthFailureError Map map = new HashMap();map.put(
30、name, name);map.put(pass, pass);map.put(email, email);return map;private void handleRegisterInfo(RegisterInfo info)if(info = null)WormToast.shortToast(getApplicationContext(), Rwork_wrong);return; /将注册状态记录下来LoginInfo.saveLoginState(getApplicationContext(), info.getState();if (info.getState() = Regis
31、terInfo.REGISTER_STATE_FAIL) WormToast.shortToast(getApplicationContext(), R.string.register_fail); else if (info.getState() = RegisterInfo.REGISTER_STATE_ERROR) WormToast.shortToast(getApplicationContext(), R.string.register_error); else if (info.getState() = RegisterInfo.REGISTER_STATE_SUCCESS) My
32、Application.sUserInfo = info.getUserInfo();/注册成功后,返回到登录界面setResult(RESULT_OK);finish();4.2.3 游戏浏览主界面截图:图4-5 游戏浏览主界面截图主要代码: /向服务器发送数据请求,并处理返回结果StringRequest request = new StringRequest(path, new Listener() public void onResponse(String json) loading = false;loadingViewUtil.hideLoadingView();pullListV
33、iew.onRefreshComplete();if (json != null) if (!isNext) /解析返回的Json数据BestGame game = JsonHomeUtil.getBastGameFromJson(json);if (game != null) / 头部viewpagersize = game.getAdvertisements().getResults().size();if (size 0) vpAdapter.bindData(game.getAdvertisements().getResults();vpHead.setAdapter(vpAdapte
34、r);initDots(size);switchDot(0);/ 每隔4秒钟切换一张图片isPagerAutoTurn = true;mHandler.postDelayed(viewPagerTask, 4 * 1000);/ 下方listviewif (game.getPackages() != null) nextPath = game.getPackages().getNext();lvAdapter = new GameLVAdapter(getActivity();lvAdapter.bindAata(game.getPackages().getResults();pullList
35、View.setAdapter(lvAdapter); else / 下方listview加载Package package1 = JsonHomeUtil.getPackagesFromJson(json);if (package1 != null & lvAdapter != null) nextPath = package1.getNext();lvAdapter.appendData(package1.getResults();lvAdapter.notifyDataSetChanged();, new ErrorListener() public void onErrorRespon
36、se(VolleyError error) layoutNoNetworkutil.showNoNetworkLayout(););4.2.4 游戏下载手游下载截图如图4-6所示:图4-6 手游下载管理界面手游下载的主要代码如下所示:/添加一个下载任务public void onClick(View v) .一些判断处理.downloadManager.addNewDownload(result, Util.getFilePath(result.getDownload(), / 如果目标文件存在,接着未完成的部分继续下载。服务器不支持 RANGE时将从新下载。true, / 如果从请求返回信息
37、中获取到文件名,下载完成后自动重命名。false,null);while (downloadInfo = null) downloadInfo=downloadManager.getDownloadInfo(result.getDownload();/下载状态回调requestCallBack(downloadInfo, holder);./将下载请求添加到下载线程中 public void addNewDownload(.) throws DbException .数据处理. HttpUtils http = new HttpUtils(); http.configRequestThread
38、PoolSize(maxDownloadThread); HttpHandler handler = http.download(result.getDownload(), target, autoResume, autoRename, new ManagerCallBack(downloadInfo, callback); . returnDownloadCount(); /下载线程Overridepublic void run() .try HttpURLConnection http = (HttpURLConnection) downUrl.openConnection();.初始化请
39、求.int startPos = block * (threadId - 1) + downLength;int endPos = block * threadId -1;/设置请求的数据范围,实现断点下载http.setRequestProperty(Range, bytes= + startPos + -+ endPos);.InputStream inStream = http.getInputStream();.读取数据. catch (Exception e) .4.2.5 软件管理设置界面如图4-7所示:图4-7 软件卸载截图/ 机身可用内存,内存总大小public void se
40、tDateInternalMemory() File path = Environment.getDataDirectory();StatFs stat = new StatFs(path.getPath();long blockSize = stat.getBlockSize();long totalSize = stat.getBlockCount() * blockSize;long availableSize = stat.getAvailableBlocks() * blockSize; / 内存总大小String DATE = Formatter.formatFileSize(ge
41、tActivity(), totalSize);String date = Formatter.formatFileSize(getActivity(), availableSize); / 可用内存String useDate = Formatter.formatFileSize(getActivity(), totalSize- availableSize);pgb_unload_memory_instory.setMax(100);int progress = (int) (float) (totalSize - availableSize) / totalSize * 100);pgb_unload_memory_instory.s