版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
计算机科学与技术专业毕业论文--基于Android平台阅读器的设计与开发摘要随着3G时代的到来移动用户通过GPRS可以高速享受Intenet提供的服务本软件通过Rss站点方便用户迅速获取感兴趣的内容本论文采用Android开源系统技术利用Java语言和Eclipse结合目前使用广泛RssReallySimpleSyndication以及目前的解析和分析工具AndroidRSSHtmlParserHTML阅读器DesignandDevelopmentofRSSReaderBasedonAndroidPlatformAbstractInpacewiththecomingof3GtimetheconsumersofChinaMobilecanenjoytheserviceprovidedbytheInternetinahighspeedviaGPRSItscontinentforconsumerstogetthecontentrapidlyinwhichtheyareinterestedthroughtheRSSinthissoftwareThepaperadoptstheAndroidopensourcesystemtakesadvantageofJavalanguageandEclipseandalsocombinesthewidelyusedRssReallySimpleSyndicationandHtmlParserwhichisthebest6>htmlanalysetoolpresentlytocompiletotheRssreaderWhatmakesthesoftwareoutoftheordinaryisthatitusesHtmlParsetoanalysethehtmldocumentfilesinordertogettheappointedcontentandcutdowntheflowonGPRSaswellasThesoftwaremakesuseofallkindsofgroupwaresofferedbytheAndroidtodesigntheinterfacesothatitmakestheconsumersexperiencewellKeywordsandroidrsshtmlParserhtmlreader 目录第一章绪论 411课题的研究意义 412相近研究课题的特点及优缺点分析 413本文的主要工作 5第二章Android的架构分析 521Android特征 522Android架构 6com关键应用程序 7com应用程序框架 7comCC函数库 7comJava程序运行环境 7comLinux内核 723Android应用的构成和工作机制 7comActivity 8comIntentReceiver 9comService 9comContentProvider 10comRss解析剖析 1024本章小结 11第三章开发环境介绍及构建 11第四章需求分析 1241功能需求 1242性能需求 1543数据需求 1644安全需求 16第五章Android数据库的设计 1651数据库及字段属性设计 1752数据库的连接 17com创建 17com数据库操作 18第六章系统设计与实现 1861Rss资源的收集和分析 1862系统界面的设计 22com主界面的实现 22com中子界面的实现 2363资源文件的解析 27comML文件的解析 27com件解析 2864数据存储 31comSharedPerference 31comFile存储方式 31comSQLiteDataBase数据库 31comAndroid中Application的应用 31com储在项目中的应用 3265内容界面功能的实现 32第七章结论 33参考文献 34第一章绪论3G网络的使用移动终端不再仅是通讯网络的终端还将成为互联网的终端随着3G时代的到来上网越来越方便而网上充斥着各种各样的信息让网民们很头疼很难找到自己感兴趣的新闻而且中国流量费用的高昂在众多网页中寻找自己感兴趣的信息浪费了过多没必要损失的流量RSS为网民提供新闻标题和摘要它的作用就像一道筛子为网民过滤了网站的大量无用信息使网民直达自己所需的网页可通过RSS阅读器进行阅读而不必每次到目标网站去寻找最新信息提供RSS服务的网站可以节省用户访问目标网站的时间便捷和主动传递这正是RSS订阅最有价值的地方RSS阅读器基本可以分为三类第一类大多数阅读器是运行在计算机桌面上的通过所订阅网站的新闻供应可自动定时地更新新闻标题在该类阅读器中有AwasuFeedDemon和RSSReader这三款流行的阅读器都提供免费试用版和付费高级版国内最近也推出了几款RSS阅读器周博通看天下博阅第二类新闻阅读器通常是内嵌于已在计算机中运行的应用程序中例如NewsGator内嵌在微软的Outlook中所订阅的新闻标题位于Outlook的收件箱文件夹中另外Pluck内嵌在InternetExplorer浏览器中第三类则是在线的WEBRSS阅读器其优势在于不需要安装任何软件就可以获得RSS阅读的便利并且可以保存阅读状态推荐和收藏自己感兴趣的文章Android的特征架构以及Android应用的构成和工作机制本文详细的提出了软件的架构以及解析RSS方案采用Java开源的JAR包对HTML文件进行分析和获取图片和文字信息对各个界面的布局和实现方式进行详细说明对数据库设计模块进行了详尽的需求分析经分析得到数据库设计模块Android是一个移动设备的软件平台是由LinuxJava构成的开源软件它提供包括SDKKeyAppsMiddlewareLinuxKernel四个部分在内的全套软件方案它开放了基于Linux内核以上的开发工具从而保证了内容的可移植性和多样性Android平台为我们开发应用程序提供了一套很好的框架我们可以在这个平台的基础上开发不同的应用程序也可以开发新的组件供应用程序调用[1]21Android特征Dalvik虚拟Android采用的Java虚拟机是自主开发的代号为Dalvik的虚拟机技术在保证API方面兼容的同时Dalvik针对移动进行了大幅优化占用资源更小运行效率更高内嵌浏览器基于开源的浏览器网页排版引擎WebKit优化的图形强大的自定义二维图形库基于OpenGLES1.O标准的3D图形功能在移动3D开发中有着至关重要的地位SQLite数据库SQLitet提供结构化的数据存储它是一款轻型免费的且开源的数据库它的设计目标是嵌入式的它占用的资源非常低需要的内存空间少处理速度比较快和支持事务处理功能等多媒体支持支持各种通用的音视频和静态图像格式如MP3JPGPNG等OpenCore是Android多媒体框架的核心所有Android平台的音视频采集播放的操作都是通过它来实现的通过OpenCore程序员可以方便快速的开发出想要的多媒体应用程序GSM技术依赖硬件GlobalSystemforMobileCommunications全球移动通讯系统俗称全球通是第二代移动通信技术其开发El的是让伞球各地可以共同使用一个移动网络标准让用户使_一部就能行遍全球蓝牙EDGE3GandWiFi是一种短距离的无线连接技术在短距离内可以实现话音和数据的无线传输EDGEEnhaIlcedDataRateforGSMEvolution是增强型数据速率GSM演进技术CameraGPScompassandaccelerometer依赖硬件GPSGlobalPositioningSystemItTI驯全球定位系统它是一个由覆盖全球的24颗1J星组成的卫星系统Compass是个开放源代码的JAVA搜索引擎框架强大的开发环境包括一个设备模拟器调试工具内存和性能检测以及EclipseIDE的开发插件Eclipse是个集成开发环境[2]22Android架构Android的架构是Linux内核CC函数库Dalvik虚拟机应用框架以及关键应用程序构成的如图2-1通过编译基于框架的应用程序可以降低开发负荷应用软件原则上是在DalvikVM上运行的图2-1Android架构图[3]com关键应用程序Android平台内包含一些关键应用程序如邮件收发客户端程序短信收发程序日历和网页浏览器等开发者可以在其平台上开发更多有特色的应用程序开发语言是Javacom应用程序框架Android应用程序的开发基于框架和组件Android本身已在其框架中提高了许多的组件供应用程序调用当然开发者也开放新的组件并将组件放入应用程序框架中以供自己和其它应用程序调用comCC函数库Android应用程序框架之下是一套CC函数库它们服务于Android应用程序组件其功能通过组件间接提供给开发者这些函数库包括标准C函数库媒体功能库浏览器引擎2D和3D图形库基于WEB应用的的安全协议SSL用于点阵和矢量字体渲染的FreeType以及SQLite引擎等comJava程序运行环境Android的Java程序运行环境包含一组Java核心函数库及Dalvik虚拟机它们有效地优化了Java程序的运行过程所有的Android应用都运行在它自己的进程里该进程是一个Dalvik虚拟机的实例Dalvik被设计成能在一台设备上高效的运行多个虚拟机实例Dalvik虚拟机的可执行文件被封装成Dalvik可执行格式dex这是被优化过的最小内存依赖的格式Java编译器dx工具将注册了的和运行时用到的类编译成dex格式Dalvik虚拟机依赖于底层Linux内核提供的功能如线程机制和内存管理机制等comLinux内核Android系统平台是基于优化了的Linux内核是其系统平台的核心它提供诸如内存管理进程管理设备驱动等服务同时也是软硬件的连接层提供了一个屏蔽层用于屏蔽硬件和上层软件23Android应用的构成和工作机制对于一个Android应用程序来说是由ActivityIntentReceiverServiceContentProvider四部分组成但并不是每一个Android应用程序都必须由这四部分组成在应用程序中使用时需要在配置文件AndroidMainfest.xml中进行配置这个配置文件是每个Android应用程序所必需的用于定义应用程序的组件组件的功能以及必要条件等comActivityActivity是构成应用程序中最重要的构造块在Android应用程序中几乎都是通过Activity来与用户进行交互所以Activity主要负责的就是创建与用户进行交互的显示窗口你可以在这些窗口里通过调用setContentViewView方法来显示你自己的用户界面活动生命周期活动Activity在系统中以活动栈的形式进行管理当一个新的活动启动后被放到了栈项成为了运行活动而新活动之前的活动在活动栈里总位于新活动之下直到新的活动退出才重新回到前台图2-2Activity状态变换路径图[4]从图2-2可以看出Activity有三个关键的循环1活动的整个生命期从首次调用onCreateBundle开始到最终调用onDestroyO结束在onCreate中进行所有初始化在onDestroyO时进行清理工作释放资源2活动的可见生命期从调用onStart开始到onStop被调用为止在这段时间内即使活动不与用户进行交互用户也可以在屏幕上看到它在这两个方法调用之间可以维护活动显示给用户的资源onStart和onStop方法可以多次调用因为活动随时可以在可见和隐藏之间进行转换3活动的后台生命期从调用onResume开始到onPause被调用为止在这段时间内活动处于其它所有活动之前并与用户进行交互一个活动可以不断在resumed状态和paused状态之间变换[4]活动之间的切换Android使用了Intent类来实现活动之间的切换工作Intent负责对应用中一次操作的动作动作涉及的数据和附加数据进行描述根据Intent的描述负责找到对应的组件将Intent传递给调用的组件并完成组件的调用因此Intent起着一种媒体中介的作用专门提供组件互相调用的相关信息实现调用者与被调用者之间的解耦在应用中我们可以以两种形式来使用Intent直接Intent指定了component属性的Intent通过指定具体的组件类通知应用启动对应的组件间接Intent没有指定comonent属性的Intent则需要包含足够的信息这样系统才能根据这些信息在所有的可用组件中确定满足此Intent的组件comIntentReceiverIntentReceivert是用于对外部事件的响应当外部事件发生时会使用NotificationManager通知用户当一个IntentReceiver被触发时系统会在需要的时候启动对应的应用程序如在本系统中当用户正在其它界面进行操作时有好友发送消息过来就会以通知的形式发送到当前界面的正上方来通知用户各种应用还可以通过使用Context.broadcastIntent将它们的IntentReceiver广播给其它的应用程序实现应用之间的通讯comServiceService是提供连续信息的应用程序它是运行于应用程序后台的服务在用户进行其它活动的时候这个服务将一直运行在基于Android平台的即时通讯系统的研究与实现后台直到用户停止该服务或服务运行结束本系统客户端扩展功能的音乐播放就是采用Service来进行设计和开发的使用户可以边聊天边听音乐comContentProviderContentProvider应用程序能够将它们的数据保存到文件SQL数据库和其它的存储设备中当应用程序需要使用存储设备中的数据时可以使用ContentProvider来完成使用ContentProvider能够灵活的替换底层使用的存储设备使开发者可以专著于应用逻辑的开发不用考虑底层存储设备的细节从而使应用系统具有良好的数据comRss解析剖析在Android平台上可以使用SimpleAPIforXMLSAXDocumentObjectModelDOM和Android附带的pull解析器解析XML文件使用SAX读取XML文件SAX是一个解析速度快并且占用内存少的解析器非常适合用于Android等移动设备SAX解析XML文件采用的是事件驱动也就是说它并不需要解析完整个文档在按内容顺序解析文档的过程中SAX会判断当前读到的字符是否合法XML语法中的某部分如果符合就会触发事件所谓事件其实就是一些回调callback方法这些方法事件定义在ContentHandler接口下面是一些ContentHandler接口常用的方法startDocument当遇到文档的开头的时候调用这个方法可以在其中做一些预处理的工作endDocument和上面的方法相对应当文档结束的时候调用这个方法可以在其中做一些善后的工作
startElementStringnamespaceURIStringlocalNameStringqNameAttributesatts当读到一个开始标签的时候会触发这个方法namespaceURI就是命名空间localName是不带命名空间前缀的标签名qName是带命名空间前缀的标签名通过atts可以得到所有的属性名和相应的值要注意的是SAX中一个重要的特点就是它的流式处理当遇到一个标签的时候它并不会纪录下以前所碰到的标签也就是说在startElement方法中所有你所知道的信息就是标签的名字和属性至于标签的嵌套结构上层标签的名字是否有子元属等等其它与结构相关的信息都是不得而知的都需要你的程序来完成这使得SAX在编程处理上没有DOM来得那么方便
endElementStringuriStringlocalNameStringname这个方法和上面的方法相对应在遇到结束标签的时候调用这个方法
characterschar[]chintstartintlength这个方法用来处理在XML文件中读到的内容第一个参数用于存放文件的内容后面两个参数是读到的字符串在这个数组中的起始位置和长度使用newStringchstartlength就可以获取内容使用DOM读取XML文件除了可以使用SAX解析XML文件大家也可以使用熟悉的DOM来解析XML文件DOM解析XML文件时会将XML文件的所有内容读取到内存中然后允许您使用DOMAPI遍历XML树检索所需的数据使用DOM操作XML的代码看起来比较直观并且在某些方面比基于SAX的实现更加简单但是因为DOM需要将XML文件的所有内容读取到内存中所以内存的消耗比较大特别对于运行Android的移动设备来说因为设备的资源比较宝贵所以建议还是采用SAX来解析XML文件当然如果XML文件的内容比较小采用DOM是可行的使用Pull解析器读取XML文件除了可以使用SAX和DOM解析XML文件大家也可以使用Android内置的Pull解析器解析XML文件Pull解析器的运行方式与SAX解析器相似它提供了类似的事件如开始元素和结束元素事件使用parsernext可以进入下一个元素并触发相应事件事件将作为数值代码被发送因此可以使用一个switch对感兴趣的事件进行处理当元素开始解析时调用parsernextText方法可以获取下一个Text类型元素的值Android平台的特征架构以及Android应用的构成和工作机制进行了详细的分析对于Android应用程序来说主要由ActivityIntentReceiverService和ContentProvider四部分组成但并不是对于每一个应用程序这四部分都是必须的Activity是应用程序中最重要的一种构造块我们对其进行了详细的分析包括Activity的生命周期以及Activity之间的切换第三章开发环境介绍及构建Android平台为开发者提供了源码开放的软件开发包SDK它包含了使用Java语言开发Android平台应用的必要工具和组件API进行开发前先要建立合适的开发环境其中基于Java的整合型可扩展平台Eclipse是我们的首选搭建环境所需要的软件操作系统WindowsXP或Linux软件包AndroidSDKADTIDE环境EclipseIDEADTEclipse33以上JDKJavaRuntimeEnvironmcntJDK安装步骤安装JDK然后配置环境变量安装EclipseAndroidSDK配置安装develcomnyudnetsdkindexhtml下载选择相应的系统进行安装安装AndroidADT插件1打开Eclipse在导航菜单中选择Help-InstallNewSoftware在workwith中输入sdl-comandroideclipseADD然后输入name随便取个有意义的都选中安装完毕后重启Eclipse在Eclipse里配置SDK路径选择Windows-Preferences-Android选择AndroidSDK的位置图4-2主界面用例图图4-3新浪Rss用例图3腾讯Rss功能该功能与新浪Rss相似如图4-4所示图4-4腾讯Rss用用例图4历史记录浏览功能记录用户浏览过的内容以方便用户再次查看这样节省GPRS流量减少用户的损失当用户不需要这些记录的时候可以清除掉这些记录如图4-5所示5收藏功能当用户对一些文章感兴趣时可以将其添加至收藏列表当用户不需要某条记录是可将其从收藏列表中删除如图4-6所示6本地缓存在浏览新闻和文章的过程中会下载图片和文字内容将这些内容保存值本地在下次浏览同样的内容的时候就不用再次链接网络直接在本地读取就可节省用户的GPRS流量当存储空间不足时用户可以选择删除这些本地缓存图4-5浏览记录用例图图4-6我的收藏用例图7异步更新访问网络比较耗时间显示一些提示信息向用户表示本软件正在运行并异步加载数据更新UI界面42性能需求软件要有良好的用户体验良好的用户体验体现在以下几个方面1界面友好用户界面要简洁直观设计合理方便用户操作让用户操作起来比较舒服并且UI视觉效应好2快速响应快速处理用户的输入或请求对于需要长时间处理的部分在其处理时可以给用户一个提示告知用户该软件正在运行3无缝性一个常见的无缝问题就是一个应用的后台进程如service或broadcastreceiver对某事件作出响应而弹出对话框这看起来仿佛并无大碍特别是当你在模拟器上单独地构建和测试你的应用时然而当你的应用在真正的设备上运行后台线程显示对话框时你的应用当时可能没有获得用户焦点这就会出现你的应用会在活动的应用后面显示对话框或者从当前应用中获得焦点并显示对话框的情况而管论当时用户正在做什么如正在打等那样的行为可能对你的应用或用户不起作用为了避免这些问题你的应用应该利用适当的系统资源Notification类来通知用户利用通知你的应用可以通过在状态条上显示一个图标来通知用户事件已经发生而非获得焦点和打断用户Mylove主要是存储收藏的内容history主要存储历史浏览记录这两个表的字段一样下面介绍history的字段如表5-1所示字段说明id记录的id号title内容的标题link内容的URLbody内容主体表5-1history字段表属性 数据类型 允许空 主键 Id INTEGER NOTnull Primarykey Title TEXT Link TEXT Body TEXT Mylove与history相同就不重复介绍了52数据库的连接这里将介绍如何进行Android数据库的连接Android中自带的SQLite数据库是十分小型的数据库这样正适合Android这种移动平台使用Android数据库的存储位置在datadatadatabases目录下Android是利用ContentProvider作为内容提供商SQLiteOpenHelper数据库帮助类来进行对数据库的创建和操作通过ContextgetContentResolver方法直接对数据库进行操作程序中数据库的类为RssDBextendSQLiteOpenHelper继承关系com创建Android提供了标准的数据库创建方式继承SQLiteOpenHelper实现onCreate和onUpgrade两个方法有个好处就是便于数据库版本的升级连接数据库的算法如下 publicRssDBContextcontext创建数据库 supercontextDB_NAMEnullDB_VERTION publicvoidonCreateSQLiteDatabasedb 类创建是调用在这里主要创建table publicvoidonUpgradeSQLiteDatabasedbintoldVersionintnewVersion 版本升级时调用数据库创建不成功会抛出FileNodFindException异常com数据库操作打开数据库操作dbthisgetWriteableDataBasethis表示RSSDB执行sql语句dbexecSqlsql插入数据dbinsert删除数据dbdelete更新数据dbupdate查询数据dbquery当执行完这些操作后一定要关闭数据库连接dbclose这些操作的具体使用方法可参照AndroidSDK第六章系统设计与实现61Rss资源的收集和分析目前有很多门户网站支持Rss订阅例如新浪腾讯搜狐百度等本软件主要收集了新浪和腾讯的Rss站点例如新浪所提供的站点分为新闻中心体育新闻科技新闻财经新闻军事新闻等新闻中心中包括各个站点的链接例如新闻中心中的新闻要闻的Rss地址是comcnnewsmarqueeddtxml体育新闻中的国际足坛的Rss地址是comcnsportsglobalfocusxml新浪具体的Rss站点的详细信息可参考这个链接comcnsportsindexshtml里面有详细的分类和各分类的Rss地址腾讯的Rss站点和新浪的类似详细信息可参考这个链接comindexshtmlRss有固定的格式截取新浪新闻的新闻要闻的部分内容xmlversion"10"encoding"utf-8" [CDATA[[科技]中国互联网5月批发IPO富豪与泡沫齐飞05051058]] comcomcnredirectphpurlcomcnchuangyesh2011-05-051XXXXXXXXXXshtml comCN comcomcnredirectphpurlcomcnchuangyesh2011-05-051XXXXXXXXXXshtml [CDATA[]] Thu5May2011025857GMT [CDATA[侯继勇北京报道5月4日晚人人网在北京国贸三期地下一层中国大宴会厅举行庆功宴除了人人网留守国内的高管主要参会人员是媒体记者活动已经格式化有领导讲话有晚宴有抽奖最后是人人网创始人陈一舟的视频连线――接受国内媒体记者采访却会回避所有尖锐]] [CDATA[[科技]福布斯人人公司加入中国高价科技股俱乐部05051056]] comcomcnredirectphpurlcomcni2011-05-0500465481304shtml comCN comcomcnredirectphpurlcomcni2011-05-0500465481304shtml [CDATA[]] Thu5May2011025622GMT [CDATA[]] 如上接下来对这些内容进行分析xmlversion"10"encoding"utf-8"代表这个文件的数据格式这一般分为utf-8和gb2312每条信息在中包含这里面有很多节点每个节点的内容有各自代表的信息Title代表标题信息Link代表这篇文章的链接地址Author代表这篇文章的作者Guid与link相似代表这篇文章的链接Category代表这篇文章所属类型pubDate代表这篇文章发布时间comments代表这篇文章的评论description代表这篇文章的简述综合以上信息完成Rss阅读不会有问题收集新浪和腾讯的这些Rss站点记录在一个XML文件中用于程序的读取和解析本软件收集的内容及格式以新浪为例部分内容如下xmlversion"10"encoding"utf-8"newstitle"新闻中心" outlinetitle"新闻要闻"xmlUrl"comcnnewsmarqueeddtxml" flag"sina_ddt"encoding"utf-8" outlinetitle"国内要闻"xmlUrl"comcnnewschinafocus15xml" flag"sina_ddt"encoding"utf-8" outlinetitle"国际要闻"xmlUrl"comcnnewsworldfocus15xml" flag"sina_ddt"encoding"utf-8" outlinetitle"社会新闻" xmlUrl"comcnnewssocietyfocus15xml"flag"sina_ddt" encoding"utf-8" outlinetitle"时政要闻" xmlUrl"comcnnewschinapolitics15xml"flag"sina_ddt" encoding"utf-8"其中title表示Rss的类型xmlUrl表示一个Rss地址连接encdoing表示Rss地址连接中的内容的数据格式flag有特定的含义根据Rss地址连接获取到的每条信息都有一个对应的连接这个连接对应的内容用浏览器查看源文件可以发现我们所需要的内容一般在一块特定的区域中其他的信息我们都不需要而且那些信息很浪费流量根据这块特定的区域找出起始位置和结束位置注意这个起始和结束的位置在这个连接的源文件中必须是唯一的flag中的值就是起始和结束位置这个值对应该项目中resvaluesarraysxml例如时政要闻对应的flag是sina_ddtsina_ddt表示的内容是arrayname"sina_ddt" stringsina_ddt_begin stringsina_ddt_end根据sina_ddt这个值就可以在代码中解析出起始位置和结束位置然后根据这两个位置就可以解析出我们需要的内容62系统界面的设计com主界面的实现Android的每一个可视化界面都有其唯一的布局配置文件该文件中有各种布局的方式和各种资源文件如图像文字颜色引用等程序在运行时可以通过代码对各个配置文件进行读取这样可以形成不同的可视化界面和绚丽的效果该软件的主界面是一个ActivityAndroid工程在启动每一个Activity时都会首先执行onCreate方法如下publicvoidonCreateBundlesavedInstanceState superonCreatesavedInstanceState setContentViewcom_tabs该方法主要执行界面的初始化操作Activity有个设置布局的方法setContentViewintid参数为资源ID该id在工程目录reslayout下主界面的布局文件为main_tabs下面是该布局文件的结构xmlversion"10"encoding"utf-8" 在线性布局中添加ViewFlipperViewFlipper可以用来指定FrameLayout内多个View之间的切换效果可以一次指定也可以每次切换的时候都指定单独的效果该类额外提供了如下几个函数isFlipping用来判断View切换是否正在进行setFilpInterval设置View之间切换的时间间隔startFlipping使用上面设置的时间间隔来开始切换所有的View切换会循环进行stopFlipping停止View切换horizontal此线性布局的子部件水平对齐Layout_heightfill_parent布局的高度为填满父布局Layout_widthwap_content布局的宽度由子部件的宽度决定com中子界面的实现在主界面中实现四个界面的切换分别是我的收藏腾讯Rss新浪Rss和浏览记录分别对应的布局文件是rss_lovexml_mainxmlsina_mainxml和rss_historyxml这些文件的在工程的reslayout下我的收藏和浏览记录界面的实现我的收藏和浏览记录的界面类似布局文件中主要是ListView组件在Android开发中ListView是比较常用的组件它一列表的形式展示具体内容并能根据数据的长度自适应显示ListView需要一个适配器android自带的一些适配器如SimplaAdapter显示比较单一所以本软件中继承BaseAdapter通过对这个适配器的扩展实现我们需要的效果扩展成一行能显示多个内容由于BaseAdapter是一个抽象类我们需要实现里面的getView方法返回一个view即视图视图可以显示在Activity上这样就可以看到我们想要的界面ListView有一个监听器OnItemClickListner实现里面的方法就可以监听Touch事件当手指点击到每一行时可以通过ListViewgetItemPositionintpotion该行信息这样就可以通过intent传递数据到其他的Activity本程序的思路是点击某一行跳转到另一个Activity显示新闻的内容如图6-1和6-2所示图6-1浏览记录页面图图6-2我的收藏界面图腾讯Rss界面的实现这个界面为了更好的用户体验使用了ExpandableListViewExpandableListView是Android中的手风琴个人感觉效果相当棒它是一个垂直滚动的显示两个级别列表项的视图如图6-3所示类似二级菜单列表项来时ExpandableListAdapter点击组可以单独展开ExpandableListView的主要方法expandGroupintgroupPos在分组列表视图中展开一组setSelectedGroupintgroupPosition设置选择指定的组setSelectedChildintgroupPositionintchildPositionbooleanshouldExpandGroup设置选择指定的子项getPackedPositionGrouplongpackedPosition返回所选择的组getPackedPositionForChildintgroupPositionintchildPosition返回所选择的子项getPackedPositionTypelongpackedPosition返回所选择项的类型ChildGroupisGroupExpandedintgroupPosition判断此组是否展开
图6-3腾讯Rss图新浪Rss界面的实现新浪Rss界面GridView图6-4点击新闻中心后ListView
Rss界面跟其他的都不同使用的是TabHost的组件TabHost可是实现在不同一屏幕内不同界面的切换新浪Rss的布局文件在reslayout下其中最最主要得是TabHost的设置它的结构如下 接下来详细介绍这些组件的功能FrameLayout是单帧布局当一个组件放在上面是下一个组件就覆盖到第一个组件上可以通过调整位置来避免组件的覆盖GridView是Android中的数据显示控件在二维可滚动的网格中呈现子项itemItme来自与之相关的LiatAdapterGridView也有一个监听器ONItemClickListener实现后可以对GridView组件中的子项进行监听在本程序中用于显示新浪Rss的类型数据源来自本地xml文件的解析将再后面介绍ListView前面已经介绍过在这里主要用于显示每种类型下的Rss地址连接TabWidget是用于切换第一个FrameLayout中的两个组件在这里我们不需要让它显示设置它的属性为不可见TabHost是用来管理FrameLayout下包含的组件这些组件必须先添加到TabHost中使用TabHostTabSpac来定义每次切换的视图通过TabHostaddTab来添加TabSpac然后通过TabHostsetCurrentTab就可以切换不同的视图63资源文件的解析文件解析是本项目中的一个重点主要包括本地文件的解析和网络文件的解析本地文件主要是XML文件如_newsxml网络文件的解析主要是通过数据流来读取资源包括HTML文件的解析XML文件的解析图片资源的获取等comML文件的解析XML文件的解析方式在前面已经介绍过在这里使用pull解析器在解析之前先构建XmlPullParserFactory然后根据XmlPullParserFactorynewPullParser获取XmlPullParser调用XmlPullParsersetInputInputStreaminputStringencoding来装载XML文件变量encoding表示字符编码默认是utf-8Pull读到XML文件的声明返回数字0对应XmlPullParserSTART_DOCUMENTPull读到XML的结束返回数字1对应XmlPullParserEND_DOCUMENTPull读到XML的开始标签返回数字2对应XmlPullParserSTART_TAGPull读到XML的结束标签返回数字3对应XmlPullParserEND_TAGPull读到XML的文本返回数字4对应XmlPullParserTEXT使用pull解析器来解析sina_rssxml根据上面返回数字来进行判断当读取到的开始标签是outline时调用XmlPullParsergetAttributeValueintindex来获取标签内的值如XmlPullParsergetAttributeValue0获取的是title的值在解析XML文件时其中有个属性是flag这个属性对应的值在之前介绍过对应的是html文件的起始位置和结束位置flag属性的值在resvaluesarrayxml中在Android项目中arrayxml文件中的array标签的属性name与flag属性的值对应但是在Android中name被自动生成一个整数对应的文件在项目的gen文件夹中的Rjava中在Android中根据ResourcegetStringArrayintid获取name所对应的值并没有提供根据字符串来获取在Java运行时环境中对于任意一个类能否知道这个类有哪些属性和方法对于任意一个对象能否调用它的任意一个方法答案是肯定的这种动态获取类的信息以及动态调用对象的方法的功能来自于Java语言的反射Reflection机制Java反射机制主要提供了以下功能在运行时判断任意一个对象所属的类
在运行时构造任意一个类的对象
在运行时判断任意一个类所具有的成员变量和方法
在运行时调用任意一个对象的方法
生成动态代理在Android上系统通过向用户显示一个称为应用无响应ANRApplicationNotResponding的对话框来防止在一段时间内响应不够快tmlParser是一个纯的ava写的解析的库它不依赖于其它的ava库文件主要用于改造或提取它能超高速解析而且不会出错现在tmlparser最新版本为20HtmlParser基本功能信息提取·文本信息抽取例如对HTML进行有效信息搜索·链接提取用于自动给页面的链接文本加上链接的标签·资源提取例如对一些图片声音的资源的处理·链接检查用于检查HTML中的链接是否有效·页面内容的监控信息转换·链接重写用于修改页面中的所有超链接·网页内容拷贝用于将网页内容保存到本地·内容检验可以用来过滤网页上一些令人不愉快的字词·HTML信息清洗把本来乱七八糟的HTML信息格式化HTML文件中我们解析的内容有时候有图片这样就需要读取图片资源并将其转化成Drawable将读取到的图片连接转换成Url调用UrlopenConnection获取网络连接根据这个连接打开数据读取流调用UrlConnectiongetInputStream调用DrawablecreateFromStreamInputStreaminputStringsrcName将读取流转换成Drawable在显示内容的时候调用64数据存储在软件正常运行时由于各个界面的切换为了数据的共享和防止数据的丢失我们需要将一些数据进行临时存储或者永久存储Android作为一种操作系统提供了如下几种数据存储的方式PreferenceFileSQLite数据和网络comSharedPerferencePerference提供了一种轻量级的数据存储方式一般数据比较少一些简单的配置信息它以键-值对的方式将数据保存在一个XML文件中使用的接口详细内容见文档androidcontentSharedPerference提供了数据的获取方法androidcontentSharedPerferenceEditor提供了数据的保存方法comFile存储方式我们可以将一些数据以文件的形式保存在设备中例如文本音频图片等Android提供了文件读取的方法ContextgetFileInputStream获取标准java文件的文件输入流FileInputStreamContextgetFileoutStream获取标准Java文件的文件输出流FileOutStreamcomSQLiteDataBase数据库Android操作系统中内置了SQLite数据库SQLite是一个嵌入式数据库引擎针对内存资源有限的设备如PDAMP3提供的一种高效的数据引擎SQLite数据库不像其他的数据库如Orcale它没有服务进程基于其自身的先天优势SQLite在嵌入式领域得到广泛的应用SQLite的使用方法在参照数据
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 二零二五版国际金融风险管理合同范本3篇
- 二零二五版建筑工地劳务用工及社会保障服务合同范本3篇
- 二零二五年酒店客房协议价优惠合作合同3篇
- 2024政府采购合同环境与安全监督协议3篇
- 2025年新型城镇化项目水电设施安装施工合同3篇
- 二零二五版板房租赁与租赁期满资产评估与转让合同3篇
- 二零二五年度出租车司机服务规范与客户满意度提升合同3篇
- 二零二五年透水混凝土工程验收与评估合同2篇
- 二零二五年智能交通管理系统采购合同3篇
- 二零二五版房屋代理租赁资产评估合同3篇
- 盖洛普Q12解读和实施完整版
- 2023年Web前端技术试题
- GB/T 20840.8-2007互感器第8部分:电子式电流互感器
- GB/T 14864-2013实心聚乙烯绝缘柔软射频电缆
- 品牌策划与推广-项目5-品牌推广课件
- 信息学奥赛-计算机基础知识(完整版)资料
- 发烟硫酸(CAS:8014-95-7)理化性质及危险特性表
- 数字信号处理(课件)
- 公路自然灾害防治对策课件
- 耳鸣中医临床路径
- 安徽身份证号码前6位
评论
0/150
提交评论