当前位置:首页 >> 互联网 >>

基于Android平台的新闻客户端的设计与实现


基于 Android 平台的新闻客户端的设计与实现

摘 要
随着智能手机世界范围内的迅速发展, 智能手机的操作系统之间的竞争也是 越来越激烈。为了让智能手机用户能够十分便利地了解当前世界的实时资讯,一 种高效的办法就是将查看新闻的功能拓展到手机终端上。因此,开发出一款智能 手机的新闻客户端将有广阔的前景。 本文是基于 android 操作系统, 开发出一款 android 手机新闻客户端应用程序, 通过工具 Eclipse 编写逻辑代码,Apache Tomcat6.0 作为应用程序的服务器,根 据数据量的要求,采用 Mysql 数据库处理数据,三者共同作用开发出的 android 新闻客户端手机软件。 本文在分析 Android 系统软件开发原理的技术层面上,开发出能为用户提供 更人性化、更方便的基于 Android 手机新闻客户端软件。通过实践与测试,本文 所述的原理和方法能够完成设计所需要的功能。 【关键词】 Android;新闻客户端软件;智能手机操作系统

I

Design and Realization of Android Client Based on The News
Abstract

With the rapid development of smart phones worldwide, competition between smartphone operating system is also more intense. To allow smartphone users to real-time information is very convenient to understand the current world, an efficient approach is to view the news feature to expand to the mobile terminals. Therefore, the development of a smart phone news client will have broad prospects. This article is based on android operating system, developed an android phone news client application logic code by writing tools Eclipse, Apache Tomcat6.0 as a server application, according to the amount of data required to process data using Mysql database , combined action developed a android phone news client software. This paper analyzes the Android system in principle the technical aspects of software development, the development could provide a more humane, more convenient mobile operating system based on Android news client software for users. Through practice and testing, principles and methods described herein can achieve the required functional design. 【Key words】 Android;News Client Software;Smartphone operating systems

II

目 录
1 绪 论 ........................................................................................................................ 1

1.1 研究内容 .......................................................................................................... I 1.2 研究意义 ..........................................................................................................1 1.3 研究现状和发展趋势 ......................................................................................1 2 系统分析与环境搭建 ................................................................................................ 2 2.1 研究目标 ..........................................................................................................2 2.2 可行性分析 ......................................................................................................2 2.3 需求分析 ..........................................................................................................3 2.4 性能分析 ..........................................................................................................3 2.5 开发环境的搭建 ..............................................................................................3 2.5.1 Java 环境配置 ..........................................................................................3 2.5.2 Eclipse 的安装 .........................................................................................3 2.5.3 Eclipse Standard 的安装 ..........................................................................3 2.5.4 Tomcat 服务器的安装 .............................................................................3 2.5.5 Mysql 数据库的安装...............................................................................3 3 系统设计与实现 ........................................................................................................ 4 3.1 软件流程 ..........................................................................................................4 3.1.1 模块设计 .................................................................................................4 3.1.2 功能设计 .................................................................................................5 3.3 用户界面设计 ..................................................................................................5 3.4 数据库设计 ......................................................................................................6 3.5 软件的实现 ......................................................................................................8 3.5.1 文件结构与说明 .....................................................................................8 3.5.2 具体实现 ............................................................................................... 11 4 系统测试 .................................................................................................................. 17 4.1 软件的测试 .............................................................................................17 4.2 测试结果及说明 .....................................................................................17 5 总结与展望 .............................................................................................................. 21 5.1 总结 ......................................................................................................... 21 5.2 展望 .........................................................................................................21
III

参考文献 ......................................................................................................................22 致 附 谢 .......................................................................................................................... 23 录 A ...................................................................................................................... 24

IV

1 绪论
1.1 研究内容
Android 应用平台新闻客户端软件是基于 Android 手机平台, 采用 Java 语言, 从网络上的开放的新闻接口获取数据,设计出针对使用 Android 平台的手机新闻 客户端资讯实时掌控的手机应用程序。

1.2 研究意义
Android 平台新闻客户端软件的开发可以进一步扩大时事新闻的覆盖面,让 广大公众能够随时随地方便且快捷地获取最新的新闻资讯信息,了解新闻时事, 本软件的广泛使用,尤其是在传授知识、普及教育方面起着非常重要的作用。

1.3 研究现状和发展趋势
目前市场研究机构 Worldpanel 发布了全球主要的国家智能手机操作系统在 去年 Q4 内的分布报告,报告指出了谷歌的 Android 继续保持着增长的势态,但 是增幅已经明显放缓了。 而在另一个方面, 苹果 iOS 操作系统在全球只能手机市 场上均有下滑,个别国家的降幅甚至高达 10.3%。最新统计数据中显示,Android 操作系统将继续领跑全球市场,包括美国、澳大利亚、中国、意大利、英国、德 国、西班牙等所占的市场比例都已经超出 50%,并且还将继续呈现上涨的趋势。 而在苹果 iOS 操作系统方面, 最大的市场份额所占比的国家依旧是美国, 数值为 43.9%;紧随美国的则是澳大利亚,数值为 35.2%;而在中国方面,市场份额也 从 21.2%下降到了 19%;在意大利,iOS 所占的市场份额更是从 23.1%猛降至 12.8%[1]。 从上面的数据可以看出,Android 手机软件的开发具有巨大的发展前景,在 Android 系统上开发出一款手机新闻客户端软件所支持的用户量也是相比较于其 他系统多出很多的。 谷歌的移动平台主管安迪· 鲁宾(Andy Rubin)表示,跟软件开发合作对象的密 切接触正在进行中。Google 与开放手机联盟联合开发了 Android 操作系统,这 个联盟由摩托罗拉、高通、宏达电、中国移动和 T-Mobile 等在内的多家无线应 用和技术的领军企业组成。Google 通过与设备制造商、开发商、运营商和其他 有关各方结成深层次的合作关系,希望借助建立开放式、标准化的移动移动电话 软件平台,在移动产业内形成一个开放性的生态系统,这将是开发 Android 软件 的一个契机,Android 平台的开发在将来必定大放异彩[2]。

1

2
2.1 研究目标

系统分析与环境搭建

1)了解 Android 应用的设计和开发过程; 2)使用多种组件进行 Android 平台新闻软件的开发。 本款手机新闻客户端软件是采用 java 语言编写,基于 Eclipse 的开发平台, 连接网络新闻数据接口,开发出了针对 Android 平台的新闻客户端手机软件。

2.2 可行性分析
开发任何一个基于手机的应用程序,都会受到资源和时间上的限制。因此, 在接收任何一个应用程序发任务之前, 必须根据用户可能提供的资源和时间条件 进行可行性分析,旨在减少项目开发风险,避免人力、财力和物力的浪费。风险 分析与可行性分析在很多方面是相互关联的,项目的风险越大,开发质量高的软 件的可行性的几率就越小。 1)经济可行性 采用的手机数据流量作为通信手段,当今通信技术的迅速发展,2G 的运营 商的 GSM 网络已经逐渐被当今的 3G、甚至是 4G 所取代,数据流量的资费也越 来越低,而且现在很多手机都可连接无线 wifi, 实现数据流量 0 资费,大大加 强了本新闻阅读软件的经济可行性。 2)技术可行性 开发一个新闻客户端软件,用到的技术不会十分复杂,用到最多的就是客户 端与服务端的数据交换时所用到的 servlet 及常见的数据库技术,android 系统下 的解析 json 数据以及 UI 的设计,经查阅相关资料是可以实现的。

2.3 需求分析
启动程序后可以进行新闻资讯的实时更新, 可分不同的栏目让使用者了解任 意感兴趣的资讯进行阅读,同时,能对感兴趣的新闻资讯发表自己的意见,进行 评论,其他用户也能看见别人发表的评论,从而进行互动交流,增强用户的体验 感,用户能通过下拉新闻列表,方便于操作。从上面的描述中可以基本了解软件 的功能需求: 1)启动应用程序; 2)设置界面:采用多种布局嵌套,美化控件。 3)显示界面:模仿网易新闻客户端进行 UI 编写。 4)详细界面:分为头条、推荐、娱乐、体育、财经、科技、游戏等板块。
2

2.4 性能分析
从用户的角度出发,针对用户的需求,所涉及的程序响应速度快、信息处理 速度快、安全性高是用户所需要的三大主要性能[2],另外为了受众面更广,根据 目前的 android 设备系统版本的分布情况, android2.3 以上的版本占到设备总量的 80%以上,所以做开发的时候选择的 android 系统最低版本也必须是 android2.3 以上来保证用户量。

2.5 开发环境的搭建
2.5.1 Java 环境配置 采用 jdk 的版本是 jdk1.6, 目前 jdk 版本最高的是 jdk1.7, 但是为了程序的稳 定性,还是采用已经稳定成熟的版本作为开发工具。 从 Oracle 公司下载 jdk1.6 之后安装,由于本机的开发系统是 win8 的 64 位 操作系统,选择下载 64 为 jdk,然后按照安装步骤一步一步 next,jdk 就安装完成 了,然后配置环境 java 的环境变量,整个 jdk 的过程就完成了。 2.5.2 Eclipse 的安装 从 Eclipse 官网 http://www.eclipse.org/downloads/下载 Eclipse3.2, 根据系统下 载相应的 Eclipse 版本,点击解压缩就行了,然后启动 eclipse.exe 就行了。值得 注意的是 Eclipse 的 bit 数要与 jdk 的一致,就是说 jdk 如果是 32 位的,Eclipse 也要是 32 位的。 2.5.3Eclipse Standard 4.3.2 的安装 Eclipse Standard 4.3.2 版本用来做服务器端程序, 方法与 Eclipse 的方法类似。 2.5.4 Tomcat 服务器的安装 从 http:/tomcat.apache.org 下载 tomcat6.0 作为的服务器,下载好文件后开始 安装,点击下一步,在安装过程中会提示设置默认的服务器端口号,若是不做修 改默认为 8080,建议不要修改,安装完成。 在 Eclipse for JavaEE 建立服务器工程的时候选择刚刚安装的 tomcat 作为服 务器就行了。 2.5.5 安装 Mysql 数据库 现如今有很多种类的数据库,如 oracle、sqlserver、mysql、access 等等很多 种,但是在选择的时候也有考究,本设计的开发涉及到的数据并不是很多所以选 择一种轻量级的数据 mysql[3]。

3

3 系统设计

3.1 系统流程
3.1.1 模块设计 软件分为了两大模块,分别是新闻客户端模块和服务器模块。 图形解析能够清楚的看出程序的功能与流程, 下图 3-1 是手机客户端流程图:

新闻界面

服务器接收指令

详细界面

接收服务 器的数据 评论界面

显示在界面 图 3-1 手机客户端流程图

如下图图 3-2 所示的是服务器端的流程图:
客户端

服务器接收指令

生成 sql 语句

调用 sql 类

数据库操作 图 3-2 服务器流程图 4

返回结果

3.1.2 功能设计 手机客户端模块功能结构如下图所示 3-3:
新闻客户端

新闻内容管理

头 条

推 荐

娱 乐

体 育

财 经

时 尚

科 技

游 戏

详细内容管理

评论管理 图 3-3 客户端功能结构图

服务器端模块功能结构如下图 3-4 所示:
服务器端

数 据 库 配 置

数 据 模 型 配 置

数 据 交 互 管 理

数 据 解 析 配 置

数 据 转 换 工 具

图 3-4 服务器端功能结构图

3.3 用户界面设计
根据需求分析可知, 应用程序应包含三个主要的用户界面,这里要进一步 分析每个用户界面中应该包括哪些显示内容。
5

1)在“新闻概况页面”中,需要显示得是各类新闻的的栏目头,然后在选择栏 目头时选择相应的新闻资讯信息显示在当前的栏目头下,资讯信息以一个 ListView 的形式展示在界面上,用户可拖动获得内容,并在滑到最后一个内容时 有一个加载更多的按钮,用户点击之后可以获得更多内容。 2)在“详细新闻页面”中,用户在点击了一条新闻之后,可以进入详细新闻界 面,在界面中会展示当前所点击新闻的标题、发表时间、作者以及评论条数,在 点击新闻详细内容的区域向两边滑动的时候还能显示上一条新闻和下一条新闻, 方便操作,不需要返回上一个界面之后才能阅读上一条或者下一条。 3)在“新闻评论页面”中,此页面展示的信息就比较简单了,根据时间的排列 显示相应新闻的评论内容,一条内容包含的信息有,用户所在的省份,发表的时 间以及评论的内容,在发表评论的编辑框会默认提示用户“请文明发表言论”。 下图就是根据对新闻界面显示内容的分析,绘制出用户界面的草图。

图 3-5 用户界面草图

3.4 数据库设计
本软件是一个需要存储很多新闻资讯信息的程序, 其中包括新闻的阅读和用 户的评论信息,这些数据都是要从数据库中查询而来的并不是缓存的数据,所以 少不了使用数据库,其中数据库为我们管理数据提供方便,Mysql 数据库使用方 便、易懂。如下图 3-6 所示的是新闻栏目的 E-R 图:
新闻栏目

标题

序列

编号

图 3-6 新闻栏目 E-R 图 6

如下图 3-7 所示的是新闻详细内容的 E-R 图:
标题 来源 新闻栏目 内容 摘要 序列 编号 评论数量 新闻编号 栏目编号

图 3-7 新闻详细内容 E-R 图

如下图 3-8 所示的是新闻评论的 E-R 图:
新闻编号 栏目编号

新闻栏目

评论内容

地区 图 3-8 新闻评论内容 E-R 图

评论时间

本软件中有三张表的数据需要存储,因此在 MySql 中分别建立三张表。新 闻类别分类表 t_category,新闻评论表 t_comment,新闻内容表 t_news。三张表 分别如下表所示:
表 3.1 新闻类别分类表 t_category 的结构 属性 cid title sequnce 数据类型 integer String text 说明 分类编号,自动增加的主键 分类名称 序列

表 3.2 显示新闻评论表 t_comment 的结构 属性 cid nid ptime region content 数据类型 integer integer String String String 7 说明 评论编号,自动增长 新闻编号 评论的日期 发布人地区(默认为未知地区) 评论内容

续表 3.2 显示新闻评论表 t_comment 的结构 supportcount opposecount String text 支持数 反对数

表 3.3 显示新闻内容表 t_news 的结构 属性 nid cid title body source ptime imgsrc summary sequence 数据类型 integer integer String String String String text String int 说明 新闻编号编号,自动增长 新闻分类号 新闻标题 新闻正文 新闻来源 发表时间 图片来源 摘要 序列

仔细分析不难得出, 后台服务是整个应用程序的核心, 主要是 “数据获取” , 用户进行点击操作,后台服务接收用户的指令,向服务器接口调用收据,服务端 接收指令,从服务器进行相应的增删改查,然后返回信息给客户端,使用户获得 需要的新闻资讯,满足客户的需求。 服务端器端的代码主要的功能就是对数据库进行的操作,采用 servlet 技术 通过接受客户端传过来的指令查询数据库,然后返回 json 数据格式的数据跟客 户端进行数据交互操作,简单方便,手机客户端接收的时候也能十分方便的解析 出来,显示在用户界面上。 在完成用户界面设计、服务器和数据库设计后,至此软件的框架设计阶段基 本完成。

3.5 功能的实现
3.5.1 文件结构与说明 1) 客户端 Eclipse 开发部分 在程序的开发阶段, 首先确定“Android 平台新闻客户端”的工程名为“快看新 闻”,据程序模块设计的内容,建立“快看新闻”工程,然后分析完成功能所需要 的代码结构,认真完善,做好每一个功能。 其工程源代码的结构与作用如下图 3-9 所示。

8

图 3-9“快看新闻”工程的源代码文件

为了使源代码文件的结构更清晰,快看新闻”工程设置了多个命名空间,其 包的作用分别展示在下表。
表 3.4 “快看新闻”工程的文件用途说明 包 名 称 com.szy.news.bean com.szy.news.custom com.szy.news.util com.szy.news.util com.szy.news com.szy.news com.szy.news com.loopj.android.http 文 件 名 Category.java CustomSimpleAdapter.java DensityUtil.java StringUtil.java MainActivity.java CommentActivity.java NewDetailActivity.ava 包内所有文件 说 明

新闻栏目的 bean 类 新闻栏目标题的适配器 像素和 dip 之间的转换工具类 String 数据转化成 int 的工具类 主新闻界面的 Activity 新闻评论界面的 Activity 新闻详细内容的 Activity 互联网上开源的 http 异步访问框 架结构

Android 中资源文件都保存在/res 的子目录中。其中,/res/drawable/目录中下 保存的是图像文件,/res/values 目录中保存的是自定义的字符串和颜色的文件以 及样式文件, /res/xml 目录中保存的是 xml 格式的数据文件, /res/layout 目录下保 存的是 UI 的布局文件。/res/anim 目录下包含的是所有的动画控制文件。程序开

9

发阶段可以被调用的所有资源都保存在这些目录中[4], 具体的文件图图 3-10 示如 下。

图 3-10 android 资源文件图

2)服务器端 Eclipse Standard 开发部分 在服务器开发端,建立工程名为“News”的工程,如下图 3-11 所示

图 3-11 服务器端目录图

配合上图的目录结构图,使结构更加清晰,目标类的作用分别展示在如下表 3-5 的工程文件目录说明中。

10

表 3.5 “News”工程的文件用途说明 包 名 称 com.szy.web.dao 文 件 名 CategoryDAO.java CommentDAO.java NewsDAO.java Config.properties SqlManager.java Category.java Comment.java News.java GetCategoriesServlet.java GetCommentsServlet.java GetNewsServlet.java GetSpecifyCategoryNewsServl et.java PostCommentServlet.java JSONArray.java JSONException.java JSONML.java JSONObject.java JSONString.java JSONStringer.java JSONTokener.java JSONWriter.java CDL.java Cookie.java CookieList.java HTTP.java HTTPTokener.java TextUtility.java 说 明

对数据库增删改查的类

com.szy.web.dao

连接 MySql 的配置文件

com.szy.web.model

新闻、评论、类型的模型类

com.szy.web.servlet

数据交互操作的 servlet 类

org.json

生成 json 文件的工具类

org.json

缓存级 http 访问工具类

com.szy.web.util

字符编码转换工具类

3.5.2 具体实现 主新闻页面的设计与实现 1)开头定义出页面所需要用到的控件以及新闻栏目的适配器,从代码中可以 看 出 , 除 了 全 局 变 量 layoutinflater , loadnews_progress , titlebar_refresh , MainActivity 类中有以上私有属性 cid、newsData 、newsListAdapter、newslists、 CatName、ategories。 点击新闻栏目之后,MainActivity 会显示相应栏目下的的新闻信息,若此栏 目下有新闻的话就会显示出来,若没有新闻的话就会提示 “该栏目下没有新闻信 息”,要是手机无法连接网络的话就会提示“网络无法连接”,十分清楚的告诉用 户现在所处的状态。
11

客户端采用的是异步 http 访问框架,其中 AsyncHttpClient 类是十分方便的 异步访问类,它是封装好的,只需提供接口地址和参数,就能十分方便的访问接 口获得数据,并且不用再写回调方法,只需要 AsyncHttpClient 中的 cilent 对象 get 或者 post 请求方式访问接口,然后重写两个方法,一个是 onsuccess(),另一 个是 onfailure(),其中 onsuccess()方法是访问接口成功,获得的数据将从方法的 参数 content 中可以得到,然后再进行相应解析,当由于接口错误或者网络错误 时或者返回错误信息时,请求数据时将会执行 onfailure()方法。 2) 访问接口成功后,会从服务器得到一个 json 数据,我们要做的就是解析 它,然后将之填充到我们的页面显示,解析 MainActivity.java 页面中接收各个栏 目的 json 格式数据,需要导入 json 包的支持,代码见附录 A。 3) 加载更多新闻按钮,是访问 getSpeCatNews 这个接口,点击按钮的时候只 是传的第二个参数变成了我们需要加载的新闻个数, 这是一个变量由我们自己定 义出来的,getSpeCatNews(cid, newsData.size(), false)。 newsData.size()新闻数目的 size 就是自己定义出来的变量。 实现的代码如下: loadMoreBtn.setOnClickListener(new OnClickListener() { public void onClick(View v) { getSpeCatNews(cid, newsData.size(), false); } }); 4) 关于界面的退出,是重写了 onKeyDown()的方法,判断是否按了后退键, 然后在界面上提示再按一次退出键退出程序, 两次退出操作的时间间隔超过两秒 退出无效,两秒以内完成退出操作,具体界面退出的代码见附录 新闻详细页面的设计与实现: 1)页面初始化 首先要 初始化变 量一些控件和变 量的信息 ,如上 一页按钮 newsdetails_titlebar_previous ,下一页按钮newsdetails_titlebar_next ,评论的按钮 newsdetails_titlebar_comments,以及手指触摸屏幕时记录的坐标StartX起点坐标 X , f l o a t 2)发送评论 评论按钮 newsdetails_titlebar_comments 会通过 intent 对象把新闻的 nid 穿到评论 页面,这里是实现按钮的监听,实现代码: newsdetails_titlebar_comments.setOnClickListener(new OnClickListener() { S t a r t Y 起 点 坐 标 Y 等 等 相 关 的 控 件 及 变 量 。

12

public void onClick(View v) { Intent intent = new Intent(NewDetailActivity.this, CommentActivity.class); intent.putExtra("nid", mNid); startActivity(intent);} }); 根据用户的体验感, 显示详细新闻信息的时候希望能够不用返回主新闻界面 查看下一条或者上一条新闻,所以在详细新闻页面添加手势判断功能,手指触摸 屏幕实现上一条或者是下一条,然后添加动画效果,让用户用起来更加舒服,更 加人性化,动画效果的配置在 res/anim 目录下。 评论界面的设计与实现 1)初始化变量 首先定义页面控件和一些变量,首先定义出评论界面的控件和变量,如发表按钮 news_reply_post , LinearLayout news_reply_edit_layout;// 评 论 的 编 辑 区 域 , LinearLayout news_reply_img_layout;//评论的图形区域 2)获得评论信息 获得评论信息,访问评论的接口,以 get 方式传递新闻的 id,然后从 json 的格式 数据中获得返回的评论信息,要是没有网络或者传递的参数不正确会弹出 toast 框提示错误信息。获得评论的接口地址是: url="http://192.168.0.1:8080/News/getComments?nid="+nid"&startnid=0&count=10 ";里面的三个参数分别是:nid新闻ID,startnid评论的起始ID和count每次需要获得 的数目,参数的作用就是让我们每次访问时,只获取10个数据,这样的好处就是 节省数据流量,并且无需占用手机额外的内存。 3)发送评论信息 以 post 方式请求数据,通过 Requestparams 对象传递参数信息,发送评论的接口 地址是:String url = "http://192.168.0.1:8080/News/postComment",需要传递的参 数是:nid 新闻 ID,region 发送人的地址,content 发送内容,访问的方法是采用异 步 http 访问框架的 post 方法访问成功会返回发送成功了信息,失败也会有相应 提示,核心代码参见附录 A。Eclipse Standard 服务器端开发部分 1)首先导入测试类和mysql的jar包如下图3-12。

图3-12 测试类和mysql的jar包 13

2)配置servlet的web.xml文件详见附录A 3)数据库管理类SqlManager.java的作用就是连接数据库配置的属性,包括数 据库主机地址、数据库名、数据库端口、数据库密码、连接字符串、连接对象。 配置资源文件和JDBC的驱动类型,代码如下: private static SqlManager manager = null; // 静态变量,支持单态模式 private PropertyResourceBundle bundle; // 配置资源文件 private static String jdbcDrive = null; // JDBC驱动类型 private String DBhost = ""; // 数据库主机地址 private String DBname = ""; // 数据库名 private String DBprot = ""; // 数据库端口 private String DBuser = ""; // 数据库用户名 private String DBpasswd = ""; // 数据库密码 private String strcon = null; // 连接字符串 private Connection conn = null; // 连接对象 private PreparedStatement pstm = null; private CallableStatement cstm = null; 私有的成员变量只是定义出来,并没有进行初始化,创建一个 Config.properties 的 配 置 文 件 , 用 来 配 置 连 接 数 据 的 各 项 配 置 参 数 。 Config.properties的配置信息如下:DBpassword=123456 然后再SqlManager.java 添加一个私有的构造方法,将 Config.properties 的配置信息加载到代码中来,用 new 一个属性资源的bundle, 参数是得到一个配置文件的输入流, 构造方法如下: private SqlManager() throws IOException{ bundle = new PropertyResourceBundle(SqlManager.class getResourceAsStream("Config.properties")); this.DBhost = getString("DBhost"); // 读取主机名 this.DBname = getString("DBname"); // 读取用户名 this.DBprot = getString("DBport"); // 读取端口 this.DBuser = getString("DBuser"); // 读取用户 this.DBpasswd = getString("DBpassword"); // 读取密码 // 设置mysql数据库的驱动程序和连接字符 jdbcDrive = "com.mysql.jdbc.Driver"; strcon = "jdbc:mysql://" + DBhost + ":" + DBprot + "/" + DBname; } 我们对数据库的增、删、改、查用到的方法全都依赖于SqlManager.java中的

14

方法,要在SqlManager.java中写出查询和更新的方法,在sql语句对数据库进行操 作 的 时 候 会 根 据 sql 语 句 的 不 同 , 参 数 也 会 不 同 , 所 以 要 在 这 里 设 置 PrepareStatement对象中sql语句中的参数的方法,配置参数的代码如下: private void setPrepareStatementParams(String sql, Object[] params) throws SQLException{ pstm = conn.prepareStatement(sql); // 获取对象 if (params != null) {for (int i = 0; i < params.length; i++) // 遍历参数列表填充参数 {pstm.setObject(i + 1, params[i]); } } } 执行查询操作是数据库操作的核心功能,代码如下: public ResultSet executeQuery(String sql, Object[] params) throws SQLException { // 执行查询数据库接口 ResultSet rs = null; manager.setPrepareStatementParams(sql, params); // 填充参数 rs = pstm.executeQuery(); // 执行查询操作 return rs; } 更新数据库的代码如下: public boolean executeUpdate(String sql, Object[] params) throws SQLException { boolean result = false; manager.setPrepareStatementParams(sql, params); // 填充参数 pstm.executeUpdate(); // 执行更新 manager.commitChange(); result = true; return result;} 4)服务器端的核心功能就是接收手机客户端发过来的指令,获得参数对数据 进行操作,然后返回json格式的数据给手机客户端,这里面的数据交互所用到的 技术是servlet技术,前面已经在web.xml文件中已经对各个servlet进行了配置。 这里以接收客户端发送过来的发表评论 PostCommentServlet.java 的指令为

15

例,进行说明,因为其他的操作指令类似,区别在于参数的获得和json数据的生 成,下面进行详细代码的介绍。 request.setCharacterEncoding("iso-8859-1") 因为从手机客户端传过来的参数 的编码是“iso-8859-1”,所以服务器端接收数据是设置格式编码为一致。 发送评论的时候手机客户端会向服务器传递三个参数, 所以我们要接收者三个参 数:String nidStr = request.getParameter("nid"); String region = request.getParameter("region"); String content = request.getParameter("content"); 接收到的三个参数都是String类型的数据,因为nid是int类型,所以要对其进 行转换,这里用到先前提到的工具类TextUtility.java: int nid = TextUtility.String2Int(nidStr); 参数content代表的发表评论内容,参数region代表的是地域,它们都有可能 是中文、英文以及数字,因为 “iso-8859-1”并不支持中文,所以这里要将它们转 换 成 “utf-8” 的 编 码 格 式 , 这 样 才 不 会 出 现 乱 码 的 情 况 , 这 里 同 样 是 用 到 TextUtility.java这个工具类,转换如下: region = TextUtility.toUTF8(region); content = TextUtility.toUTF8(content); 在获得参数以后,需要调用CommentDAO.java中的addComment方法,将参 数添加进去。 public void addComment(int nid,String ptime,String region,String content) throws SQLException{ sql = "INSERT INTO t_comment (nid,ptime,region,content) VALUES Object[] params = new Object[] { nid, ptime, region,content }; manager.connectDB(); manager.executeUpdate(sql, params); manager.closeDB(); } 在增加成功之后,要返回一个成功的json数据给客户端。其他的servlet类的 操作原理与上述类似,这里就不一一累赘了。

16

4 系统测试
4.1 软件的测试
软件测试的目的,第一个是确认 android 新闻客户端是否能运行,其一个方面 就是确认软件是否完成了我先前设计的那些功能。第二个是提供信息,比如提供 给我回馈信息,看看在开发的哪些步骤上面能够有精简,能够有提升。第三个是 测试不仅是在测试这个新闻客户端的本身,而且还包括了整个的开发过程。如果 在这个新闻客户端开发完成后出现了很多问题, 那就说明了开发的过程还存在漏 洞。

4.2 测试与实现的结果及说明
1)采用的真机进行测试 在工程名“快看新闻”上点右键,然后选择“Run As”或者点击菜单栏上面的
按钮,然后选择“Android Application”。 出现如下图4-1所示:

图4-1 选择测试工具图

为什么要用真机来做测试, 因为用户都是用的真机, 而且选择用模拟器来做, 有两点弊端。 (1)模拟器反应速度太慢 (2)测试效果不如在真机上看的方便
17

2)启动手机新闻客户端 选择屏幕上的“快看新闻”如下图4-2:

图4-2 新闻页面的图标

3)进入到载入界面如下图4-3所示:

图4-3 载入界面效果图

4)然后就是显示主要新闻界面的内容了, 界面显示如前面设计的简单界面加 以样式修饰,界面包含软件名称、刷新按钮、新闻分栏、栏目下一栏的按钮、新 闻列表和加载更多按钮,所有的新闻放在一个 ListView 里面界面只会显示六条 新闻, 滑动界面可以查看更多的新闻,点击加载更多按钮可以加载出更多的新闻 加入 ListView 显示在界面上,具体效果如下图 4-4 所示:

18

图 4-4 主新闻页面效果图

5)点击新闻列表中的某一条新闻,选择查看新闻详细信息,因为在主新闻的 页面只能看到新闻的预览内容, 新闻的详细页面能够看到新闻的标题, 详细信息, 发表人和发表时间, 在上面的新闻分栏的右边还能看到评论的数目信息,点击新 闻的数目的信息能够看到该条新闻的具体评论信息,具体效果如下图 5-5 所示:

图4-5 详细新闻页面效果图

19

6)点击跟帖数目,进入评论界面,界面显示的就是该条新闻的评论信息,每 一条评论信息包含发表人的地点,内容和评论时间,然后再加入一条评论与左图 进行对比,效果如下图4-6所示:

图4-6 新闻评论页面效果图

测试小结: 经过一系列的测试, 这款新闻客户端软件基本完成了预期的功能, 并且系统的稳定性也较好。

20

5 总结与展望

5.1 总结
经过数月的不懈努力,Android 平台新闻客户端软件终于完成了,用户可以 通过这款新闻客户端了解新闻时事, 对于 Android 平台的开发需要用到很多 Java 的基础知识,在这方面 Java 语言带给我了很多的方便。在整个开发设计过程之 中,我学习到了很多的 Android 平台的知识,比如 Android 的 UI 的设计优化、 样式的的设计、Activity、Service、BroadcastReceiver、ContentProvider 等四大组 件的运用,还有对 Eclipse、Tomcat、Mysql 等开发工具的熟练使用。 虽然软件相比于已经上线的新闻客户端软件还有一定的差距, 但是这并没有 打击我对于 Android 平台开发的兴趣,反倒这是一件激励我的事情,我从中发现 了我很多不足的方面, 然后可以通过更加认真地学习, 掌握更多先进的编程技术, 设计出更系统更好用的 Android 软件。

5.2 展望
经过了对本软件的设计和实践, 将老师在课堂上和自己在课外时间学习的知 识做了一个总结。 一方面有做的很好的地方,另一方面同样也存在着有缺陷的地 方。 这是为我们马上毕业工作敲的一个警钟。学校学习到的知识虽然可能能用在 工作中的并不会很多, 但是我们在学校学到的是学习方法, 因为不管在任何阶段, 人总是需要不停地学习。 在以后的工作和学习当中, 我将保持积极认真的态度, 遇事谨慎, 仔细分析, 以一颗永不停歇的心来面对人生,在软件开发这份职业上,需要充分锻炼自己的 思维与敏锐, 因为软件开发更新换代是十分迅速的,想不被淘汰就不能停下学习 的脚步。

21

参考文献
[1] 肖云鹏,刘宴兵. Android 程序设计教程[M].清华大学出版社,2013-04 [2] 张荣. Android 开发与应用[M].人民邮电出版,2014-02 [3] 王向辉, 张国印, 赖明珠. Android 应用程序开发[M].清华大学出版社, 2012-05 [4] 赵常松. Android 应用程序开发与典型案例[M].电子工业出版社,2012-10 [5] 高凯,仇晶. Android 智能手机软件开发教程[M]. 国防工业出版社,2012-06 [6] 孙卫琴 编著 .JAVA 面向对象编程[M].电子工业出版社,2009-7 [7] 张帆 编著 .Java 范例开发大全[M].清华大学出版社,2010-6-1 [8] 杨春花,俞黎敏.Effective Java 中文版[M].机械工业出版社,2009-1-1 [10] 李刚. 轻量级 Java EE 企业应用实战[M].电子工业出版社,2008-11-1 [11](美)塞若贝茨.Head First Java(中文版)[M].中国电力出版社,2007-2-1 [12] 张孝祥,张红梅.JavaScript 网页开发[M] .清华大学出版社,2004-11 [13] 张孝祥.深入体验 Java Web 开发内幕[M].电子工业出版社,2006-10-1 [14] 张孝祥.深入体验 Java Web 高级特性[M] .电子工业出版社,2007-12 [15] 俞东进,任祖杰 Java EE Web 应用开发基础[M].电子工业出版社,2012-6 [16] 求是科技.Java 数据库系统开发实例导航[J].人民邮电出版社,2004-5

22

附录 A
初始化新闻界面控件和变量:

private int cid;//新闻ID private ArrayList<HashMap<String, Object>> newsData;//新闻列表 private SimpleAdapter newsListAdapter;//定义新闻栏目适配器 private ListView newslists;//新闻列表的ListView LayoutInflater layoutinflater; Button titlebar_refresh;//刷新按钮 ProgressBar loadnews_progress;//进程提示框 private String mCatName; private List<HashMap<String, Category>> categories; 获取新闻的代码: TextView categorytitle; for (int i = 0; i < parent.getCount(); i++) { categorytitle = (TextView) parent.getChildAt(i); categorytitle.setTextColor(0xffadb2ad); categorytitle.setBackgroundDrawable(null); } categorytitle = (TextView) v; categorytitle.setTextColor(Color.WHITE); categorytitl.setBackgroundResource(R.drawable. categorybar_item_background); if (newsListAdapter == null) { Toast.makeText(MainActivity.this, "网络连接失败", 0).show(); return; } newsListAdapter.notifyDataSetChanged(); cid=categories.get(position).get( "category_title").getCid(); mCatName =categories.get(position). get("category_title").getTitle(); System.out.println("cid=" + cid);// 获取该栏目下新闻 System.out.println(newsData.size() + "newsData数目"); getSpeCatNews(cid, 0, true);
23

System.out.println(newsData.size() + "newsData 数目 ");// 通知 ListView 进 行更新 newsListAdapter.notifyDataSetChanged(); } 其中,封装好的访问服务器的接口方法:getSpeCatNews(cid, 0, true), 具体的代码如下: public void getSpeCatNews(int cid, int startnid, boolean firsttime) AsyncHttpClient client = new AsyncHttpClient(); String path = "http://192.168.1.16:8080/News/ getSpecifyCategoryNews?startnid="+ startnid + "&count=7&cid=" client.get(path, new AsyncHttpResponseHandler() { @Override public void onSuccess(String content) { // TODO Auto-generated method stub super.onSuccess(content); dothis(content); } public void onFailure(Throwable error, String content) { Toast.makeText(MainActivity.this, "网络连接失败,请检查", 0).show(); } }); } JSONArray newslist = dataObject.getJSONArray("newslist"); for (int i = 0; i < newslist.length(); i++) { JSONObject newsObject = (JSONObject) newslist.opt(i); HashMap<String, Object> hashMap = new HashMap<String, Object>(); hashMap.put("nid", newsObject.getInt("nid")); hashMap.put("newslist_item_title",newsObject.getString("title")); hashMap.put("newslist_item_digest",newsObject.getString("digest")); hashMap.put("newslist_item_source",newsObject.getString("source")); hashMap.put("newslist_item_ptime",newsObject.getString("ptime")); hashMap.put("newslist_item_comments",newsObject.getString("commentcount"); newsData.add(hashMap);} + cid; {

24

退出界面实现的代码如下: public boolean onKeyDown(int keyCode, KeyEvent event) { if (keyCode == KeyEvent.KEYCODE_BACK) {// 截获后退键 long currentTime = new Date().getTime(); // 如果时间间隔大于2秒, 不处理 if ((currentTime - preTime) > TWO_SECOND) { Toast.makeText(this, "再按一次退出键退出程序", Toast.LENGTH_SHORT).show();// 显示消息 preTime = currentTime;// 更新时间 return true;// 截获事件,不再处理 } } return super.onKeyDown(keyCode, event); } 评论界面的初始化代码: ViewFlipper news_body_flipper;//动画Flipper LayoutInflater newsbodyinflater; Button newsdetails_titlebar_previous;//上一页 Button newsdetails_titlebar_next;//下一页 Button newsdetails_titlebar_comments;//评论按钮 int count;//数量 ArrayList<HashMap<String, Object>> mNewsData = new ArrayList<HashMap<String, Object>>(); int position;//当前页面的位置 Integer mNid; float StartX;//起点坐标X float StartY;//起点坐标Y TextView newsdetails_titlebar_title; TextView newsDetails; HashMap<String, Object> hashmap; View bodyviewlayout; 加载下一页 private void shownext() {

25

if (position >= mNewsData.size() - 1) { Toast.makeText(NewDetailActivity.this, "已到最后一页", return; } else { position++; inflateview(); news_body_flipper.setOutAnimation(this, R.anim.push_left_out); news_body_flipper.setInAnimation(this, R.anim.push_left_in); news_body_flipper.showNext(); } } 加载上一页 private void showprevious() { if (position <= 0) { Toast.makeText(NewDetailActivity.this, "当前已经是第一页", 0).show(); return; } else { position--; inflateview(); news_body_flipper.setInAnimation(this, R.anim.push_right_in); news_body_flipper.setOutAnimation(this, R.anim.push_right_out); news_body_flipper.showPrevious(); } } 0).show();

判断手指方向的代码: public boolean onTouch(View v, MotionEvent event) { switch (event.getAction()) {
26

case MotionEvent.ACTION_DOWN: StartX = event.getX(); StartY = event.getY(); break; case MotionEvent.ACTION_UP: float y = StartY - event.getY(); float x = StartX - event.getX(); if (x > 0) {//若x>0,则方向是向坐滑 float angle = Math.abs(y) / Math.abs(x); if (angle < 0.5) { shownext(); } } else//若x<0,则方向是向右滑 { float angle = Math.abs(y) / Math.abs(x); if (angle < 0.5) { showprevious(); } } break; } return true; } ImageButton news_reply_img_btn;//回复评论的imageview LinearLayout news_reply_edit_layout;//评论的编辑区域 LinearLayout news_reply_img_layout;//评论的图形区域 Button news_reply_post;//发表评论 int nid;//新闻id EditText news_reply_edittext;//评论的回复内容 String content; List<HashMap<String, Object>> comments; 发送评论的核心代码: public void senComment(){ content =news_reply_edittext.getText().toString().trim();

27

AsyncHttpClient client = new AsyncHttpClient(); String url = "http://192.168.0.1:8080/News/postComment"; RequestParams params = new RequestParams(); params.put("nid", nid+""); params.put("region", "湖南省长沙市"); params.put("content", content); client.post(url, params, new AsyncHttpResponseHandler() { //发送成功 public void onSuccess(String content) { String retStr = content; try { JSONObject jsonObject = new JSONObject(retStr); int retCode = jsonObject.getInt("ret"); if (0 == retCode) { Toast.makeText(CommentActivity.this, "发送成功", Toast.LENGTH_SHORT).show(); return; } } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } } //发送失败 public void onFailure(Throwable error, String content) { Toast.makeText(CommentActivity.this, "网络连接异常", Toast.LENGTH_SHORT).show(); } }); } Servlet的web.xml配置文件 <servlet><servlet-name>GetCategoriesServlet</servlet-name><servlet-class>com.szy .web.servlet.GetCategoriesServlet</servlet-class></servlet>

28

<servlet><servlet-name>GetSpecifyCategoryNewsServlet</servlet-name> <servlet-class>com.szy.web.servlet.GetSpecifyCategoryNewsServlet</servlet-class>< /servlet> <servlet><servlet-name>GetNewsServlet</servlet-name> <servlet-class>com.szy.web.servlet.GetNewsServlet</servlet-class></servlet> <servlet><servlet-name>GetCommentsServlet</servlet-name> <servlet-class>com.szy.web.servlet.GetCommentsServlet</servlet-class></servlet > <servlet><servlet-name>PostCommentServlet</servlet-name> <servlet-class>com.szy.web.servlet.PostCommentServlet</servlet-class></servlet> <servlet-mapping><servlet-name>GetCategoriesServlet</servlet-name> <url-pattern>/getCategories</url-pattern> </servlet-mapping><servlet-mapping><servlet-name>GetSpecifyCategoryNewsServl et</servlet-name> <url-pattern>/getSpecifyCategoryNews</url-pattern></servlet-mapping> <servlet-mapping> <servlet-name>GetNewsServlet</servlet-name><url-pattern>/getNews</url-pattern> </servlet-mapping> <servlet-mapping><servlet-name>GetCommentsServlet</servlet-name><url-pattern> /getComments</url-pattern></servlet-mapping> <servlet-mapping><servlet-name>PostCommentServlet</servlet-name> <url-pattern>/postComment</url-pattern></servlet-mapping> <welcome-file-list><welcome-file>index.jsp</welcome-file></welcome-file-list>

29


赞助商链接
相关文章:
基于Android的新闻客户端_毕业设计说明书
毕业设计说明书基于 Android 的新闻客户端 学生姓名: 学专院: 业: 学号: ...7 2.2 系统客户端实现总体架构 ......
基于Android平台的新闻客户端的设计与实现毕业论文_图文
毕业论文 基于 Android 平台的新闻客户端的设计与实现 I 摘要 随着智能手机世界范围内的迅速发展, 智能手机的操作系统之间的竞争也是 越来越激烈。为了让智能手机...
基于Android平台新闻客户端设计与实现
基于Android平台新闻客户端设计与实现 - 分类号 UDC 密级 编号 本科毕业论文(设计) 题目 基于 Android 平台新闻客户端设计与实现 所在院系专业名称年 ...
基于Android平台的新闻客户端的设计与实现毕业论文_图文
基于Android平台的新闻客户端的设计与实现毕业论文 - 毕业论文 基于 Android 平台的新闻客户端的设计与实现 I 摘要 随着智能手机世界范围内的迅速发展, 智能手机的...
基于Android的新闻客户端毕业设计
基于Android的新闻客户端毕业设计 - 基于 Android 的新闻客户端毕业设计 1 需求分析 本章首先分析研究背景,介绍了研究目的与意义,接着分析并介绍了系统的功 能性...
基于android平台的新闻阅读软件的设计与实现开题报告
基于 Android 的新闻采集应用平台的设计与开发一、课题的研究目的和意义经过多年的发展,第三代数字通信(3G)技术获得了广泛的接受,它为移动终 端用户带来了更快的...
基于Android平台的新闻客户端的设计与实现毕业设计_图文
基于 Android 平台的新闻客户端的设计与实现 摘要 随着智能手机世界范围内的迅速发展,智能手机的操作系统之间的竞争也 是越来越激烈。...
安卓课程设计——新闻客户端(基于网页抓取)
安卓课程设计——新闻客户端(基于网页抓取) - 题目 android 课程设计——新闻客户端 姓名: 学号: 专业: 学院: 指导教师: 二零一八年十一月 一、...
基于Android手机app开发与设计 毕业设计 开题报告_图文
基于Android手机app开发与设计 毕业设计 开题报告_计算机软件及应用_IT/计算机_专业资料。基于Android 手机app开发 电子同学录的设计与开发 ...
基于安卓的系统开题报告
意见反馈 | 下载客户端 | 百度首页 | 登录注册新闻...基于 Android 平台的学生教务信息系统设计与实现 学 ...校内新闻公告 图 2 Android 系统功能结构图 四、拟...
更多相关标签: