基于安卓Android平台的新闻客户端的设计与实现毕业论文_第1页
基于安卓Android平台的新闻客户端的设计与实现毕业论文_第2页
基于安卓Android平台的新闻客户端的设计与实现毕业论文_第3页
基于安卓Android平台的新闻客户端的设计与实现毕业论文_第4页
基于安卓Android平台的新闻客户端的设计与实现毕业论文_第5页
已阅读5页,还剩56页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

基于Android平台的新闻客户端的设计与实现摘要随着智能世界范围内的迅速开展,智能的操作系统之间的竞争也是越来越剧烈。为了让智能用户能够十分便利地了解当前世界的实时资讯,一种高效的方法就是将查看新闻的功能拓展到终端上。因此,开发出一款智能的新闻客户端将有广阔的前景。本文是基于android操作系统,开发出一款android新闻客户端应用程序,通过工具Eclipse编写逻辑代码,ApacheTomcat6.0作为应用程序的效劳器,根据数据量的要求,采用Mysql数据库处理数据,三者共同作用开发出的android新闻客户端软件。本文在分析Android系统软件开发原理的技术层面上,开发出能为用户提供更人性化、更方便的基于Android新闻客户端软件。通过实践与测试,本文所述的原理和方法能够完成设计所需要的功能。【关键词】Android;新闻客户端软件;智能操作系统DesignandRealizationofAndroidClientBasedonTheNewsAbstractWiththerapiddevelopmentofsmartphonesworldwide,competitionbetweensmartphoneoperatingsystemisalsomoreintense.Toallowsmartphoneuserstoreal-timeinformationisveryconvenienttounderstandthecurrentworld,anefficientapproachistoviewthenewsfeaturetoexpandtothemobileterminals.Therefore,thedevelopmentofasmartphonenewsclientwillhavebroadprospects.Thisarticleisbasedonandroidoperatingsystem,developedanandroidphonenewsclientapplicationlogiccodebywritingtoolsEclipse,ApacheTomcat6.0asaserverapplication,accordingtotheamountofdatarequiredtoprocessdatausingMysqldatabase,combinedactiondevelopedaandroidphonenewsclientsoftware.ThispaperanalyzestheAndroidsysteminprinciplethetechnicalaspectsofsoftwaredevelopment,thedevelopmentcouldprovideamorehumane,moreconvenientmobileoperatingsystembasedonAndroidnewsclientsoftwareforusers.Throughpracticeandtesting,principlesandmethodsdescribedhereincanachievetherequiredfunctionaldesign.【Keywords】Android;NewsClientSoftware;Smartphoneoperatingsystems目录1绪论 11.1研究内容 11.2研究意义 11.3研究现状和开展趋势 12系统分析与环境搭建 22.1研究目标 22.2可行性分析 22.3需求分析 32.4性能分析 32.5开发环境的搭建 32.5.1Java环境配置 32.5.2Eclipse的安装 32.5.3EclipseStandard的安装 32.5.4Tomcat效劳器的安装 32.5.5Mysql数据库的安装 33系统设计与实现 43.1软件流程 43.1.1模块设计 43.1.2功能设计 53.3用户界面设计 53.4数据库设计 63.5软件的实现 83.5.1文件结构与说明 83.5.2具体实现 114系统测试 174.1软件的测试 174.2测试结果及说明 175总结与展望 215.1总结 215.2展望 21参考文献 22致谢 23附录A 241 绪论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系统上开发出一款新闻客户端软件所支持的用户量也是相比拟于其他系统多出很多的。谷歌的移动平台主管安迪·鲁宾(AndyRubin)表示,跟软件开发合作对象的密切接触正在进行中。Google与开放联盟联合开发了Android操作系统,这个联盟由摩托罗拉、高通、宏达电、中国移动和T-Mobile等在内的多家无线应用和技术的领军企业组成。Google通过与设备制造商、开发商、运营商和其他有关各方结成深层次的合作关系,希望借助建立开放式、标准化的移动移动软件平台,在移动产业内形成一个开放性的生态系统,这将是开发Android软件的一个契机,Android平台的开发在将来必定大放异彩[2]。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.4性能分析从用户的角度出发,针对用户的需求,所涉及的程序响应速度快、信息处理速度快、平安性高是用户所需要的三大主要性能[2],另外为了受众面更广,根据目前的android设备系统版本的分布情况,android2.3以上的版本占到设备总量的80%以上,所以做开发的时候选择的android系统最低版本也必须是android2.3以上来保证用户量。2.5开发环境的搭建Java环境配置采用jdk的版本是jdk1.6,目前jdk版本最高的是jdk1.7,但是为了程序的稳定性,还是采用已经稳定成熟的版本作为开发工具。从Oracle公司下载jdk1.6之后安装,由于本机的开发系统是win8的64位操作系统,选择下载64为jdk,然后按照安装步骤一步一步next,jdk就安装完成了,然后配置环境java的环境变量,整个jdk的过程就完成了。Eclipse的安装从Eclipse官网:///downloads/下载Eclipse3.2,根据系统下载相应的Eclipse版本,点击解压缩就行了,然后启动eclipse.exe就行了。值得注意的是Eclipse的bit数要与jdk的一致,就是说jdk如果是32位的,Eclipse也要是32位的。EclipseStandard4.3.2的安装EclipseStandard版本用来做效劳器端程序,方法与Eclipse的方法类似。Tomcat效劳器的安装从:/下载tomcat6.0作为的效劳器,下载好文件后开始安装,点击下一步,在安装过程中会提示设置默认的效劳器端口号,假设是不做修改默认为8080,建议不要修改,安装完成。在EclipseforJavaEE建立效劳器工程的时候选择刚刚安装的tomcat作为效劳器就行了。安装Mysql数据库现如今有很多种类的数据库,如oracle、sqlserver、mysql、access等等很多种,但是在选择的时候也有考究,本设计的开发涉及到的数据并不是很多所以选择一种轻量级的数据mysql[3]。3系统设计3.1系统流程模块设计软件分为了两大模块,分别是新闻客户端模块和效劳器模块。图形解析能够清楚的看出程序的功能与流程,以下图3-1是客户端流程图:新闻界面新闻界面详细界面效劳器接收指令详细界面效劳器接收指令接收效劳器的数据接收效劳器的数据评论界面评论界面显示在界面显示在界面图3-1客户端流程图如以下图图3-2所示的是效劳器端的流程图:客户端客户端效劳器接收指令效劳器接收指令生成sql语句生成sql语句调用sql类调用sql类返回结果数据库操作返回结果数据库操作图3-2效劳器流程图功能设计客户端模块功能结构如以下图所示3-3:新闻客户端新闻客户端新闻内容管理新闻内容管理游戏科技时尚财经娱乐体育推荐头条游戏科技时尚财经娱乐体育推荐头条详细内容管理详细内容管理评论管理评论管理图3-3客户端功能结构图效劳器端模块功能结构如以下图3-4所示:数据库配置数据转换工具数据解析配置数据交互管理数据模型配置效劳器端数据库配置数据转换工具数据解析配置数据交互管理数据模型配置效劳器端图3-4效劳器端功能结构图3.3用户界面设计根据需求分析可知,应用程序应包含三个主要的用户界面,这里要进一步分析每个用户界面中应该包括哪些显示内容。1)在“新闻概况页面〞中,需要显示得是各类新闻的的栏目头,然后在选择栏目头时选择相应的新闻资讯信息显示在当前的栏目头下,资讯信息以一个ListView的形式展示在界面上,用户可拖动获得内容,并在滑到最后一个内容时有一个加载更多的按钮,用户点击之后可以获得更多内容。2)在“详细新闻页面〞中,用户在点击了一条新闻之后,可以进入详细新闻界面,在界面中会展示当前所点击新闻的标题、发表时间、作者以及评论条数,在点击新闻详细内容的区域向两边滑动的时候还能显示上一条新闻和下一条新闻,方便操作,不需要返回上一个界面之后才能阅读上一条或者下一条。3)在“新闻评论页面〞中,此页面展示的信息就比拟简单了,根据时间的排列显示相应新闻的评论内容,一条内容包含的信息有,用户所在的省份,发表的时间以及评论的内容,在发表评论的编辑框会默认提示用户“请文明发表言论〞。以下图就是根据对新闻界面显示内容的分析,绘制出用户界面的草图。图3-5用户界面草图3.4数据库设计本软件是一个需要存储很多新闻资讯信息的程序,其中包括新闻的阅读和用户的评论信息,这些数据都是要从数据库中查询而来的并不是缓存的数据,所以少不了使用数据库,其中数据库为我们管理数据提供方便,Mysql数据库使用方便、易懂。如以下图3-6所示的是新闻栏目的E-R图:新闻栏目新闻栏目编号序列标题编号序列标题图3-6新闻栏目E-R图如以下图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的结构属性数据类型说明cidinteger分类编号,自动增加的主键titleString分类名称sequncetext序列表3.2显示新闻评论表t_comment的结构属性数据类型说明cidinteger评论编号,自动增长nidinteger新闻编号ptimeString评论的日期regionString发布人地区〔默认为未知地区〕contentString评论内容续表3.2显示新闻评论表t_comment的结构supportcountString支持数opposecounttext反对数表3.3显示新闻内容表t_news的结构属性数据类型说明nidinteger新闻编号编号,自动增长cidinteger新闻分类号titleString新闻标题bodyString新闻正文sourceString新闻来源ptimeString发表时间imgsrctext图片来源summaryString摘要sequenceint序列仔细分析不难得出,后台效劳是整个应用程序的核心,主要是“数据获取〞,用户进行点击操作,后台效劳接收用户的指令,向效劳器接口调用收据,效劳端接收指令,从效劳器进行相应的增删改查,然后返回信息给客户端,使用户获得需要的新闻资讯,满足客户的需求。效劳端器端的代码主要的功能就是对数据库进行的操作,采用servlet技术通过接受客户端传过来的指令查询数据库,然后返回json数据格式的数据跟客户端进行数据交互操作,简单方便,客户端接收的时候也能十分方便的解析出来,显示在用户界面上。在完成用户界面设计、效劳器和数据库设计后,至此软件的框架设计阶段根本完成。3.5功能的实现文件结构与说明1)客户端Eclipse开发局部在程序的开发阶段,首先确定“Android平台新闻客户端〞的工程名为“快看新闻〞,据程序模块设计的内容,建立“快看新闻〞工程,然后分析完成功能所需要的代码结构,认真完善,做好每一个功能。其工程源代码的结构与作用如以下图3-9所示。图3-9“快看新闻〞工程的源代码文件为了使源代码文件的结构更清晰,快看新闻〞工程设置了多个命名空间,其包的作用分别展示在下表。表3.4“快看新闻〞工程的文件用途说明包名称文件名说明Category.java新闻栏目的bean类CustomSimpleAdapter.java新闻栏目标题的适配器DensityUtil.java像素和dip之间的转换工具类StringUtil.javaString数据转化成int的工具类MainActivity.java主新闻界面的ActivitycoCommentActivity.java新闻评论界面的ActivityNewDetailActivity.ava新闻详细内容的Activity包内所有文件互联网上开源的异步访问框架结构Android中资源文件都保存在/res的子目录中。其中,/res/drawable/目录中下保存的是图像文件,/res/values目录中保存的是自定义的字符串和颜色的文件以及样式文件,/res/xml目录中保存的是xml格式的数据文件,/res/layout目录下保存的是UI的布局文件。/res/anim目录下包含的是所有的动画控制文件。程序开发阶段可以被调用的所有资源都保存在这些目录中[4],具体的文件图图3-10示如下。图3-10android资源文件图2)效劳器端EclipseStandard开发局部在效劳器开发端,建立工程名为“News〞的工程,如以下图3-11所示图3-11效劳器端目录图配合上图的目录结构图,使结构更加清晰,目标类的作用分别展示在如下表3-5的工程文件目录说明中。表3.5“News〞工程的文件用途说明包名称文件名说明CategoryDAO.javaCommentDAO.javaNewsDAO.java对数据库增删改查的类CpertiesSqlManager.java连接MySql的配置文件Category.javaComment.javaNews.java新闻、评论、类型的模型类GetCategoriesServlet.javaGetCommentsServlet.javaGetNewsServlet.javaGetSpecifyCategoryNewsServlet.javaPostCommentServlet.java数据交互操作的servlet类org.jsonJSONArray.javaJSONException.javaJSONML.javaJSONObject.javaJSONString.javaJSONStringer.javaJSONTokener.javaJSONWriter.java生成json文件的工具类org.jsonCDL.javaCookie.javaCookieList.java.javaTokener.java缓存级访问工具类TextUtility.java字符编码转换工具类具体实现主新闻页面的设计与实现1)开头定义出页面所需要用到的控件以及新闻栏目的适配器,从代码中可以看出,除了全局变量layoutinflater,loadnews_progress,titlebar_refresh,MainActivity类中有以上私有属性cid、newsData、newsListAdapter、newslists、CatName、ategories。点击新闻栏目之后,MainActivity会显示相应栏目下的的新闻信息,假设此栏目下有新闻的话就会显示出来,假设没有新闻的话就会提示“该栏目下没有新闻信息〞,要是无法连接网络的话就会提示“网络无法连接〞,十分清楚的告诉用户现在所处的状态。客户端采用的是异步访问框架,其中AsyncClient类是十分方便的异步访问类,它是封装好的,只需提供接口地址和参数,就能十分方便的访问接口获得数据,并且不用再写回调方法,只需要AsyncClient中的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(newOnClickListener(){publicvoidonClick(Viewv){getSpeCatNews(cid,newsData.size(),false);}});4)关于界面的退出,是重写了onKeyDown()的方法,判断是否按了后退键,然后在界面上提示再按一次退出键退出程序,两次退出操作的时间间隔超过两秒退出无效,两秒以内完成退出操作,具体界面退出的代码见附录 新闻详细页面的设计与实现:1)页面初始化首先要初始化变量一些控件和变量的信息,如上一页按钮newsdetails_titlebar_previous,下一页按钮newsdetails_titlebar_next,评论的按钮newsdetails_titlebar_comments,以及手指触摸屏幕时记录的坐标StartX起点坐标X,floatStartY起点坐标Y等等相关的控件及变量。2)发送评论评论按钮newsdetails_titlebar_comments会通过intent对象把新闻的nid穿到评论页面,这里是实现按钮的监听,实现代码:newsdetails_titlebar_comments.setOnClickListener(newOnClickListener(){publicvoidonClick(Viewv){Intentintent=newIntent(NewDetailActivity.this,CommentActivity.class);intent.putExtra("nid",mNid);startActivity(intent);}});根据用户的体验感,显示详细新闻信息的时候希望能够不用返回主新闻界面查看下一条或者上一条新闻,所以在详细新闻页面添加手势判断功能,手指触摸屏幕实现上一条或者是下一条,然后添加动画效果,让用户用起来更加舒服,更加人性化,动画效果的配置在res/anim目录下。评论界面的设计与实现1)初始化变量首先定义页面控件和一些变量,首先定义出评论界面的控件和变量,如发表按钮news_reply_post,LinearLayoutnews_reply_edit_layout;//评论的编辑区域,LinearLayoutnews_reply_img_layout;//评论的图形区域2)获得评论信息获得评论信息,访问评论的接口,以get方式传递新闻的id,然后从json的格式数据中获得返回的评论信息,要是没有网络或者传递的参数不正确会弹出toast框提示错误信息。获得评论的接口地址是:.1:8080/News/getComments?nid="+nid"&startnid=0&count=10";里面的三个参数分别是:nid新闻ID,startnid评论的起始ID和count每次需要获得的数目,参数的作用就是让我们每次访问时,只获取10个数据,这样的好处就是节省数据流量,并且无需占用额外的内存。3)发送评论信息以post方式请求数据,通过Requestparams对象传递参数信息,发送评论的接口地址是:Stringurl="://:8080/News/postComment",需要传递的参数是:nid新闻ID,region发送人的地址,content发送内容,访问的方法是采用异步访问框架的post方法访问成功会返回发送成功了信息,失败也会有相应提示,核心代码参见附录A。EclipseStandard效劳器端开发局部1)首先导入测试类和mysql的jar包如以下图3-12。图3-12测试类和mysql的jar包2)配置servlet的web.xml文件详见附录A3)数据库管理类SqlManager.java的作用就是连接数据库配置的属性,包括数据库主机地址、数据库名、数据库端口、数据库密码、连接字符串、连接对象。配置资源文件和JDBC的驱动类型,代码如下:privatestaticSqlManagermanager=null;//静态变量,支持单态模式 privatePropertyResourceBundlebundle;//配置资源文件 privatestaticStringjdbcDrive=null;//JDBC驱动类型 privateStringDBhost="";//数据库主机地址 privateStringDBname="";//数据库名 privateStringDBprot="";//数据库端口 privateStringDBuser="";//数据库用户名 privateStringDBpasswd="";//数据库密码 privateStringstrcon=null;//连接字符串 privateConnectionconn=null;//连接对象 privatePreparedStatementpstm=null; privateCallableStatementcstm=null;私有的成员变量只是定义出来,并没有进行初始化,创立一个Cperties的配置文件,用来配置连接数据的各项配置参数。Cperties的配置信息如下:DBpassword=123456然后再SqlManager.java添加一个私有的构造方法,将Cperties的配置信息加载到代码中来,用new一个属性资源的bundle,参数是得到一个配置文件的输入流,构造方法如下:privateSqlManager()throwsIOException{bundle=newPropertyResourceBundle(SqlManager.classgetResourceAsStream("Cperties"));this.DBhost=getString("DBhost");//读取主机名this.DBname=getString("DBname");//读取用户名this.DBprot=getString("DBport");//读取端口this.DBuser=getString("DBuser");//读取用户this.DBpasswd=getString("DBpassword");//读取密码//设置mysql数据库的驱动程序和连接字符river";strcon="jdbc:mysql://"+DBhost+":"+DBprot+"/"+DBname;}我们对数据库的增、删、改、查用到的方法全都依赖于SqlManager.java中的方法,要在SqlManager.java中写出查询和更新的方法,在sql语句对数据库进行操作的时候会根据sql语句的不同,参数也会不同,所以要在这里设置PrepareStatement对象中sql语句中的参数的方法,配置参数的代码如下:privatevoidsetPrepareStatementParams(Stringsql,Object[]params)throwsSQLException{pstm=conn.prepareStatement(sql);//获取对象if(params!=null){for(inti=0;i<params.length;i++)//遍历参数列表填充参数{pstm.setObject(i+1,params[i]); } }}执行查询操作是数据库操作的核心功能,代码如下:publicResultSetexecuteQuery(Stringsql,Object[]params)throwsSQLException{//执行查询数据库接口ResultSetrs=null;manager.setPrepareStatementParams(sql,params);//填充参数rs=pstm.executeQuery();//执行查询操作returnrs;}更新数据库的代码如下:publicbooleanexecuteUpdate(Stringsql,Object[]params)throwsSQLException{booleanresult=false;manager.setPrepareStatementParams(sql,params);//填充参数pstm.executeUpdate();//执行更新managermitChange();result=true;returnresult;}4)效劳器端的核心功能就是接收客户端发过来的指令,获得参数对数据进行操作,然后返回json格式的数据给客户端,这里面的数据交互所用到的技术是servlet技术,前面已经在web.xml文件中已经对各个servlet进行了配置。这里以接收客户端发送过来的发表评论PostCommentServlet.java的指令为例,进行说明,因为其他的操作指令类似,区别在于参数的获得和json数据的生成,下面进行详细代码的介绍。request.setCharacterEncoding("iso-8859-1")因为从客户端传过来的参数的编码是“iso-8859-1〞,所以效劳器端接收数据是设置格式编码为一致。发送评论的时候客户端会向效劳器传递三个参数,所以我们要接收者三个参数:StringnidStr=request.getParameter("nid");Stringregion=request.getParameter("region");Stringcontent=request.getParameter("content");接收到的三个参数都是String类型的数据,因为nid是int类型,所以要对其进行转换,这里用到先前提到的工具类TextUtility.java:intnid=TextUtility.String2Int(nidStr);参数content代表的发表评论内容,参数region代表的是地域,它们都有可能是中文、英文以及数字,因为“iso-8859-1〞并不支持中文,所以这里要将它们转换成“utf-8〞的编码格式,这样才不会出现乱码的情况,这里同样是用到TextUtility.java这个工具类,转换如下:region=TextUtility.toUTF8(region);content=TextUtility.toUTF8(content);在获得参数以后,需要调用CommentDAO.java中的addComment方法,将参数添加进去。publicvoidaddComment(intnid,Stringptime,Stringregion,Stringcontent)throwsSQLException{sql="INSERTINTOt_comment(nid,ptime,region,content)VALUES Object[]params=newObject[]{nid,ptime,region,content};manager.connectDB();manager.executeUpdate(sql,params);manager.closeDB();}在增加成功之后,要返回一个成功的json数据给客户端。其他的servlet类的操作原理与上述类似,这里就不一一累赘了。4系统测试4.1软件的测试软件测试的目的,第一个是确认android新闻客户端是否能运行,其一个方面就是确认软件是否完成了我先前设计的那些功能。第二个是提供信息,比方提供应我回馈信息,看看在开发的哪些步骤上面能够有精简,能够有提升。第三个是测试不仅是在测试这个新闻客户端的本身,而且还包括了整个的开发过程。如果在这个新闻客户端开发完成后出现了很多问题,那就说明了开发的过程还存在漏洞。4.2测试与实现的结果及说明1)采用的真机进行测试在工程名“快看新闻〞上点右键,然后选择“RunAs〞或者点击菜单栏上面的按钮,然后选择“AndroidApplication〞。出现如以下图4-1所示:图4-1选择测试工具图为什么要用真机来做测试,因为用户都是用的真机,而且选择用模拟器来做,有两点弊端。(1)模拟器反响速度太慢(2)测试效果不如在真机上看的方便2)启动新闻客户端选择屏幕上的“快看新闻〞如以下图4-2:图4-2新闻页面的图标3)进入到载入界面如以下图4-3所示:图4-3载入界面效果图4)然后就是显示主要新闻界面的内容了,界面显示如前面设计的简单界面加以样式修饰,界面包含软件名称、刷新按钮、新闻分栏、栏目下一栏的按钮、新闻列表和加载更多按钮,所有的新闻放在一个ListView里面界面只会显示六条新闻,滑动界面可以查看更多的新闻,点击加载更多按钮可以加载出更多的新闻参加ListView显示在界面上,具体效果如以下图4-4所示:图4-4主新闻页面效果图5)点击新闻列表中的某一条新闻,选择查看新闻详细信息,因为在主新闻的页面只能看到新闻的预览内容,新闻的详细页面能够看到新闻的标题,详细信息,发表人和发表时间,在上面的新闻分栏的右边还能看到评论的数目信息,点击新闻的数目的信息能够看到该条新闻的具体评论信息,具体效果如以下图5-5所示:图4-5详细新闻页面效果图 6)点击跟帖数目,进入评论界面,界面显示的就是该条新闻的评论信息,每一条评论信息包含发表人的地点,内容和评论时间,然后再参加一条评论与左图进行比照,效果如以下图4-6所示:图4-6新闻评论页面效果图测试小结:经过一系列的测试,这款新闻客户端软件根本完成了预期的功能,并且系统的稳定性也较好。5总结与展望5.1总结经过数月的不懈努力,Android平台新闻客户端软件终于完成了,用户可以通过这款新闻客户端了解新闻时事,对于Android平台的开发需要用到很多Java的根底知识,在这方面Java语言带给我了很多的方便。在整个开发设计过程之中,我学习到了很多的Android平台的知识,比方Android的UI的设计优化、样式的的设计、Activity、Service、BroadcastReceiver、ContentProvider等四大组件的运用,还有对Eclipse、Tomcat、Mysql等开发工具的熟练使用。虽然软件相比于已经上线的新闻客户端软件还有一定的差距,但是这并没有打击我对于Android平台开发的兴趣,反倒这是一件鼓励我的事情,我从中发现了我很多缺乏的方面,然后可以通过更加认真地学习,掌握更多先进的编程技术,设计出更系统更好用的Android软件。5.2展望经过了对本软件的设计和实践,将老师在课堂上和自己在课外时间学习的知识做了一个总结。一方面有做的很好的地方,另一方面同样也存在着有缺陷的地方。这是为我们马上毕业工作敲的一个警钟。学校学习到的知识虽然可能能用在工作中的并不会很多,但是我们在学校学到的是学习方法,因为不管在任何阶段,人总是需要不停地学习。在以后的工作和学习当中,我将保持积极认真的态度,遇事谨慎,仔细分析,以一颗永不停歇的心来面对人生,在软件开发这份职业上,需要充分锻炼自己的思维与敏锐,因为软件开发更新换代是十分迅速的,想不被淘汰就不能停下学习的脚步。参考文献肖云鹏,刘宴兵.Android程序设计教程[M].清华大学出版社,2021-04张荣.Android开发与应用[M].人民邮电出版,2021-02王向辉,张国印,赖明珠.Android应用程序开发[M].清华大学出版社,2021-05赵常松.Android应用程序开发与典型案例[M].电子工业出版社,2021-10高凯,仇晶.Android智能软件开发教程[M].国防工业出版社,2021-06孙卫琴编著.JAVA面向对象编程[M].电子工业出版社,2021-7张帆编著.Java范例开发大全[M].清华大学出版社,2010-6-1杨春花,俞黎敏.EffectiveJava中文版[M].机械工业出版社,2009-1-1[10]李刚.轻量级JavaEE企业应用实战[M].电子工业出版社,2008-11-1[11]〔美〕塞假设贝茨.HeadFirstJava〔中文版〕[M].中国电力出版社,2007-2-1[12]张孝祥,张红梅.JavaScript网页开发[M].清华大学出版社,2004-11[13]张孝祥.深入体验JavaWeb开发内幕[M].电子工业出版社,2006-10-1[14]张孝祥.深入体验JavaWeb高级特性[M].电子工业出版社,2007-12[15]俞东进,任祖杰JavaEEWeb应用开发根底[M].电子工业出版社,2021-6[16]求是科技.Java数据库系统开发实例导航[J].人民邮电出版社,2004-5附录A初始化新闻界面控件和变量:privateintcid;//新闻ID privateArrayList<HashMap<String,Object>>newsData;//新闻列表 privateSimpleAdapternewsListAdapter;//定义新闻栏目适配器 privateListViewnewslists;//新闻列表的ListView LayoutInflaterlayoutinflater; Buttontitlebar_refresh;//刷新按钮 ProgressBarloadnews_progress;//进程提示框 privateStringmCatName; privateList<HashMap<String,Category>>categories;获取新闻的代码:TextViewcategorytitle;for(inti=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); System.out.println(newsData.size()+"newsData数目");//通知ListView进行更新 newsListAdapter.notifyDataSetChanged();}其中,封装好的访问效劳器的接口方法:getSpeCatNews(cid,0,true),具体的代码如下:publicvoidgetSpeCatNews(intcid,intstartnid,booleanfirsttime) { AsyncClientclient=newAsyncClient(); Stringpath="://6:8080/News/getSpecifyCategoryNews?startnid="+startnid+"&count=7&cid=" +cid; client.get(path,newAsyncResponseHandler(){ @Override publicvoidonSuccess(Stringcontent){ //TODOAuto-generatedmethodstub super.onSuccess(content); dothis(content); } publicvoidonFailure(Throwableerror,Stringcontent){ Toast.makeText(MainActivity.this,"网络连接失败,请检查", 0).show(); } });}JSONArraynewslist=dataObject.getJSONArray("newslist");for(inti=0;i<newslist.length();i++){JSONObjectnewsObject=(JSONObject)newslist.opt(i);HashMap<String,Object>hashMap=newHashMap<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);}退出界面实现的代码如下: publicbooleanonKeyDown(intkeyCode,KeyEventevent){ if(keyCode==KeyEvent.KEYCODE_BACK){//截获后退键 longcurrentTime=newDate().getTime(); //如果时间间隔大于2秒,不处理 if((currentTime-preTime)>TWO_SECOND){ Toast.makeText(this,"再按一次退出键退出程序", Toast.LENGTH_SHORT).show();//显示消息 preTime=currentTime;//更新时间 returntrue;//截获事件,不再处理 } } returnsuper.onKeyDown(keyCode,event);}评论界面的初始化代码:ViewFlippernews_body_flipper;//动画Flipper LayoutInflaternewsbodyinflater; Buttonnewsdetails_titlebar_previous;//上一页 Buttonnewsdetails_titlebar_next;//下一页 Buttonnewsdetails_titlebar_comments;//评论按钮 intcount;//数量 ArrayList<HashMap<String,Object>>mNewsData=new ArrayList<HashMap<String,Object>>(); intposition;//当前页面的位置 IntegermNid; floatStartX;//起点坐标X floatStartY;//起点坐标Y TextViewnewsdetails_titlebar_title; TextViewnewsDetails; HashMap<String,Object>hashmap;Viewbodyviewlayout;加载下一页 privatevoidshownext(){ if(position>=mNewsData.size()-1){ Toast.makeText(NewDetailActivity.this,"已到最后一页", 0).show(); 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(); }}加载上一页 privatevoidshowprevious(){ 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(); }}判断手指方向的代码:publicbooleanonTouch(Viewv,MotionEventevent){ switch(event.getAction()){ caseMotionEvent.ACTION_DOWN: StartX=event.getX(); StartY=event.getY(); break; caseMotionEvent.ACTION_UP: floaty=StartY-event.getY(); floatx=StartX-event.getX(); if(x>0){//假设x>0,那么方向是向坐滑 floatangle=Math.abs(y)/Math.abs(x); if(angle<0.5){ shownext(); } }else//假设x<0,那么方向是向右滑{ floatangle=Math.abs(y)/Math.abs(x); if(angle<0.5){ showprevious(); } } break; } returntrue; }ImageButtonnews_reply_img_btn;//回复评论的imageview LinearLayoutnews_reply_edit_layout;//评论的编辑区域 LinearLayoutnews_reply_img_layout;//评论的图形区域 Buttonnews_reply_post;//发表评论 intnid;//新闻id EditTextnews_reply_edittext;//评论的回复内容 Stringcontent;List<HashMap<String,Object>>comments;发送评论的核心代码: publicvoidsenComment(){ content=news_reply_edittext.getText().toString().trim(); AsyncClientclient=newAsyncClient(); Stringurl="://:8080/News/postComment"; RequestParamsparams=newRequestParams(); params.put("nid",nid+""); params.put("region","湖南省长沙市"); params.put("content",content); client.post(url,params,newAsyncResponseHandler(){ //发送成功 publicvoidonSuccess(Stringcontent){ StringretStr=content; try{ JSONObjectjsonObject=newJSONObject(retStr); intretCode=jsonObject.getInt("ret"); if(0==retCode){ Toast.makeText(CommentActivity.this,"发送成功", Toast.LENGTH_SHORT).show(); return; } }catch(Exceptione){ //TODOAuto-generatedcatchblock e.printStackTrace(); } } //发送失败 publicvoidonFailure(Throwableerror,Stringcontent){ 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><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>GetSpecifyCategoryNewsServlet</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>本科毕业设计〔论文〕简明指导手册1毕业设计(论文)总论1.1概述高等院校的毕业设计(论文)教学过程是实现本科培养目标及规格的重要培养阶段。毕业设计(论文)是学生毕业前的最后学习阶段,是学习深化与升华的重要过程;是能力与素质培养的重要途径;是学生学习、研究与实践成果的全面总结;是学生综合素质与实践能力培养效果的全面检验;是学生毕业及学位资格认定的重要依据;是评价高等学校教育教学质量的重要依据。1.1.1毕业设计(论文)的根本概念〔1〕毕业设计的内涵毕业设计是高等学校应届毕业生,毕业前接受课题任务,所进行的设计过程,并取得其设计成果。〔2〕毕业论文的内涵毕业论文是高等学校学生毕业前所撰写的学术论文。毕业论文说明作者在科学研究工作中取得的新成果或提出的新见解,并说明作者具有的科研能力与学识水平。毕业论文具有学术论文所共有的一般属性,它的构成与展开严格按照绪论、本论、结论的思维方式,以事实为根底,以严谨的推理过程为依据,得出可信的科学结论。1.1.2毕业设计(论文)的特点与功能〔1〕毕业设计的特点与功能①毕业设计的特点高等院校学生毕业设计具有设计内容的科学性、设计思想的新颖性、设计表述的标准性、设计条件的约束性、设计过程的综合性、设计结果的实用性等工程设计的特点外,还具有毕业设计任务确实定首先考虑教学根本要求、毕业设计时间的限定性及学业的规定性、毕业设计是在指导教师指导下独立完成的等特点。②毕业设计的功能·教学与教育功能毕业设计教学过程是高等院校培养方案的重要组成局部;是进行设计科学教育,强化工程意识,接受工程根本训练,提高工程实践能力的重要培养阶段;是培养优良的思维品质,进行综合素质教育的重要途径。通过毕业设计教学工作,培养学生综合运用多学科理论、知识与技能,解决具有一定复杂程度的工程实际问题的能力;培养学生树立正确的设计思想和掌握现代设计方法;培养学生严肃认真的科学态度和严谨求实的工作作风;培养学生优良的思维品质,强化工程实际意识;培养学生2工学院毕业设计〔论文〕简明指导手册勇于实践、勇于探索和开拓创新的精神。在毕业设计阶段,通过毕业设计教学与教育功能的实现,有益于学生科学的智能结构的形成及综合素质的全面培养。·社会功能毕业设计课题来源于实际,毕业设计成果直接或间接为经济建设效劳,为生产、科研效劳,为社会效劳,以实现毕业设计的社会功能。〔2〕毕业论文的特点与功能①毕业论文的特点毕业论文或称学位论文是学术论文中的一种类型,具有学术性、科学性、创造性,即一般学术论文的共同属性,同时具有以下特点:·毕业论文课题确实定,首先要符合教学根本要求,同时也要兼顾科学研究实际需要,紧密联系实际。·毕业论文具有时间的限定性及学业的规定性。·毕业论文是在指导教师指导下独立完成的。②毕业论文的功能·教学与教育功能毕业论文教学过程是高等学校培养方案的重要组成局部,是学生毕业前提交的一份具有一定理论与实际价值的学术论文。它是高等学校学生从事系统的科学研究的初步尝试;是在指导教师指导下,对取得的科研成果的综合表述。通过毕业论文的教学过程,培养学生探求未知、探索真理的科学精神,以及优良的科学品质与科学素养;培养学生从事科学研究的根本能力。通过毕业论文的教学过程,检验学生综合运用根底理论、根本知识和实验技术,解决科学和技术领域有关问题的能力;检验科研根本训练的实际效果。·社会功能毕业论文是以应用研究成果作为媒介与生产和社会实际相联系。然后,通过开发研究的成果应用于生产实际,为社会效劳。同时,毕业论文又是面向社会发表研究成果的重要手段,也是信息交流与信息存储的重要工具,从而实现其社会功能。3工学院毕业设计〔论文〕简明指导手册1.2毕业设计(论文)教学各阶段流程表1毕业设计(论文)教学各阶段流程1、指导教师上报课12、教研室(课程组)召开会议进行课题审查、论证〔要求纪录3、院系〔学术委员会〕或邀请校外专家对教研室上报课题进行评4、对学生公布课题,并确保一名学生做一个课题〔或子课题5、院系汇总通过评审的课题,并作为教学执行方案报教务1、指导教师指导学生查阅相关文献〔包括一定数量的外文文献22、毕业生就课题撰写开题报告,开题报告包括以下内容2.1课题背景介2.2课题拟设计研究的主要内容、实验方2.3相关文献综2.4预期成果〔或阶段性结果3、开题报告辩论〔各院系制定辩论方法,报教务处备案1

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论