毕业设计(论文)-基于Android的桌面便捷组件开发.doc_第1页
毕业设计(论文)-基于Android的桌面便捷组件开发.doc_第2页
毕业设计(论文)-基于Android的桌面便捷组件开发.doc_第3页
毕业设计(论文)-基于Android的桌面便捷组件开发.doc_第4页
毕业设计(论文)-基于Android的桌面便捷组件开发.doc_第5页
已阅读5页,还剩72页未读 继续免费阅读

下载本文档

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

文档简介

基于Android的桌面便捷组件开发摘 要本篇文章内容是在Android平台的基础上对widget开发技术进行了分析及学习。本文设计的是基于Android平台设计的,Android 系统是一个层次的软件集,所以先从层次方面对Android 进行系统研究;其次,通过对Android 平台上应用的开发,更进一步了解Android 这个系统。此次基于Android平台的桌面便捷组件的设计与实现主要通过Android Studio开发工具, Java语言来完成的。首先实现软件网络请求模块,该模块是使用Google API网络接口访问网络的Json文件,然后获取城市的天气预报信息是通过剖析Json文件。最后桌面组件的完成是使用widget制作方式和利用Remote Views等技术。关键词: Android 桌面组件 天气 便捷The Development of Convenient desktop Components Based on AndroidABSTRACTThis article contents is based on the Android platform for widget development techniques are analyzed and learning.This design is based on the Android platform design, Android system is a hierarchical set of software, so start with aspects of the Android system-level research; secondly, through the development of applications on the Android platform, to further understand the Android system. The Design and Implementation of Desktop Convenience Package Android platform, mainly through the Android Studio development tool, Java language to complete.First is to use software to achieve better network interface Google API to access the network xml file, and then get the weather forecast of the city is by analyzing the xml file. Desktop complete the final assembly is to use the widget production methods and the use of technologies such as Remote Views. Key Words: Android desktop widget weather Convenient41目 录第一章 概述51.1 课题研究背景51.2 课题研究现状51.3 项目开发任务61.4 Android系统简介61.4.1 Application(系统结构)61.4.2 Application(应用程序)71.4.3 Application Framework(应用程序框架)71.4.4 Libraries and Runt Time(库和运行环境)71.5 应用程序组成71.5.1 Activity简介81.5.2 Service简介81.5.3 Content Provider简介81.5.4 Intent简介9第二章 需求分析102.1 用户需求分析102.2 软件流程图102.3 用例图112.4 软件功能模块列表112.4.1 系统信息模块112.4.2 天气模块112.4.3 开关模块122.4.3 网络信息模块12第三章 总体设计133.1 功能设计133.1.1 组件功能组合133.1.2 部分组件介绍133.2程序结构设计143.3 操作指南15第四章 详细设计与实现174.1 模块设计174.2 网络功能的实现184.2.1 标准Java接口说明184.2.2 Apache接口说明194.2.3 应用Java接口连接网络214.3 实现xml及json的解析214.4 制作小组件(widget)应用程序244.4.1 源程序组织254.4.2 类之间的互相合作264.4.3 实现Best Weather Manager类264.4.5 实现Free Weather Handler类274.4.6 实现SystemAppDate类274.5.7 实现TimeTickerService类314.5.8 accu weather接口样式31第五章 软件测试325.1 测试目的325.2 选择测试方法325.3 白盒测试325.3.1 测试电量功能是否正常运行325.3.2 测试网络请求天气数据是否正常335.3.3 添加GA统计让用户为你做白盒测试345.4 黑盒测试35第六章 特色与创新366.1界面简洁功能齐全366.2项目开发结构清晰366.2.1项目机构分析366.2.2核心方法分析37第七章 开发小结397.1 遇到问题及解决方法397.1.1 制作及添加小组件(widget)397.1.2 Remote Views的限制407.1.3 图片在widget中显示407.1.4 进行权限声明在Android Manifest.xml中407.1.5 为widget中的按钮设置On click事件417.1.6 应用Bundle实现消息的传递417.1.7 在App Widget Provider类中取到Intent的附加信息417.1.8 ContentResolver查询错误427.2 开发体会43附录一、 操作指南45附录二、 部分关键源码48致 谢74天津理工大学2016届本科毕业设计说明书第一章 概述1.1 课题研究背景随着13年12月处,三大运营商的TD-LTE制式的4G牌照是由中华人民共和国工信部给其发放的,这表明了中国正式进入4G时代。中国对于4G正式商用和规模建网的重视,为中国在基于Android的应用程序开发处于一个蒸蒸日上时期起着一个重要的作用。Android是基于Linux平台开源手机操作系统名称,它声称自己是第一个为移动终端打造的真正开放性和完整性的移动软件15。 它涵盖了操作系统、中间件、用户界面和应用程序 智能手机工作所需的全部软件,而且并不会存在阻挡移动产业创新的专属权障碍。Google与开放手机携手合作开发了 Android,这个联盟包括中国移动、Motorola、高通、宏达电子和 T-Mobile 等 30 多家技术和无线应用的领军企业组成。 Android有如下多个优势:1.开放性。2.不受运营商约束。3.较为成熟的Linux系统。4.较强的可移植性和强大的操作性。5. 强大的Google作为传媒平台14。1.2 课题研究现状Widget作为桌面小组件的新模式,Widget在20010年的市场已十分成熟,并为广告商和刚刚起步的公司创造了新的机遇。然而开发Widget的软件开发人员说这一桌面组件的影响力明显被严重的低估了13。Widget是Android 4.0以后才添加的一个特性,允许应用程序在用户的Home screen(桌面显示屏)上显示一些常用和重要的信息。简明扼要的表达就是Widget有两个特征: 1.是可以添加到桌面显示屏上。 2.可以依照设定的时间进行内容刷新。以上两点特征就是由安卓系统中的 App Widget Framework(框架) 来支撑完成的。 当最初的控件编写出来,如时钟和相框主屏幕 ,随着第一款安卓手机的发布后,软件开发人员开始对于Widget(小工具)开始深入的研究并且编写各种更加实用的Widget,随着Widget API的发布,为软件研发人员带来了新的开发模式,除了最初的电话应用功能外,后来又不断研发出更多应用于生活的应用。1.3 项目开发任务调研及方案制定:在Google上查找GooglePlay搜索最多的工具类应用,分析搜索排行数据,总结出20项功能。对20项功能进行开发可行性研究,最终确定8项功能。对这8项功能进行开发方案制定。原型图及交互设计:设计多种功能组合,分析不同功能组合适合的用户群体,确立10种以上的产品方案。对所确立的方案进行原型图及交互模型的设计。框架及模块搭建:对主要的开发模块进行搭建,主要包括:网络请求模块、数据解析模块、和定时服务模块以及RemoteView传递机制的建立等功能模块。将上述主要功能模块封装为library。单元测试:对于健壮的程序来说模块的单元测试是必不可少的,该部分工作是将搭建的功能模块一一进行单元测试,并最后进行整体测试。布局编写:本款软件拥有简介优美的界面和简单的交互,让用户使用更加顺心,该部分工作就是对十几款应用的界面进行编写。机型适配:android因为其开源的原因导致其碎屏化特别严重所以适配工作是必须的,利用genymotion打开不同分辩率的android模拟器在不同分辨率下用dimen文件进行适配。1.4 Android系统简介1.4.1 Application(系统结构)Android作为用于移动设备的开发平台,该软件层次结构含有如下三部分。1.操作系统2.中间件3.应用程序。其框架如图1-1所示:图 1-1 系统结构图如上图对其软件结构从上到下层析可以分为以下几个层次:1 (Application)应用程序;2 (Application Framework)应用程序框架;3 (Libraries and Runt Time)各种库和安卓运行环境;4 (OS)操作系统层。1.4.2 Application(应用程序) 安卓的Application经常涉及用户界面和用户交互,这种程序是被用户真实感受到的。目前安卓的应用程序正基于Java语言上开发的。desktop,contact,phone和browser等核心应用安卓本身就有的。同时软件开发人员实现自己的程序可以根据应用程序框架层的API,这也是安卓开源的所表现的巨大潜力。开放和强大的安卓为每一个程序开发人员提供了一个公平的平台,每一个研发人员都可以加入移动互联网络世界,携手促进移动互联的发展10。1.4.3 Application Framework(应用程序框架)常见的开发人员可以使用安卓核心应用系统API。安卓的应用开发框架设计的非常巧妙,通过这套设计,各种服务也可以被各种应用程序多次使用,各种组件可以被用户的应用程序多次反复利用。开发人员应该更好地理解这套框架的工作机制,这样才能开发出更好的应用程序5。1.4.4 Libraries and Runt Time(库和运行环境)安卓中包含了一些C/C+库,安卓系统的不同组件可以使用这些库。他们通过安卓的应用程序框架为开发者提供服务。1.5 应用程序组成 如果要对应用进行开发,还需要深入分析安卓应用构造。安卓的应用程序是由下列4个模块构造而成:一 Activity(活动)二 Broadcast Intent Receiver(广播接收意向)三 Service(服务)四 Content Provider(内容提供商) 不是每个安卓的应用程序都一定要有这4个部分,它可以根据开发人员的需求进行随意的组合 13,下面介绍该项目中所涉及的模块。1.5.1 Activity简介 Activity是最基础的模块。我们称之为活动,简单的说,一个活动(Activity)通常就是指一个用户可以看到的一个单独的屏幕9。主要用于处理应用程序的整体性工作。例如,对一个文本信息应用而言,第一个屏幕用来显示发送消息的联系人列表,第二个屏幕用来写文本消息和选择收件人,第三个屏幕查看消息历史或者消息设置操作等。 每一个屏幕都是独立活动的,很容易从这一个屏幕到另一个新的屏幕,而且完成新的活动。当一个新的屏幕打开时,先前的屏幕将暂停并存储在历史堆栈中。用户可以返回前一个屏幕在历史堆栈中,当屏幕不再使用时,也可以从历史堆栈中移除3。1.5.2 Service简介 Service就是服务的意思,既然是服务,Service将是一个生命周期长而且没有用户界面的程序。例如,是从播放列表中的媒体播放器播放歌曲,应该会有多个activity在这个媒体播放器应用中,让用户可以选择歌曲播放。然而,音乐重新播放的这个功能并没有与之相对应的activity,因为用户会认为在浏览到其他屏幕时音乐应该还在播放。这个例子说明,媒体播放器这个activity会使用Context.start Service来启动service,其可以保持音乐的播放在后台运行16。同时,该系统也将保持这个service一直执行到这个service运行结束。此外,我们还可以通过使用Context.bind Service方法连接到另一个service上(如果这个service当前还没有激活,它会将它启动)。当连接到一个service之后,还可以被用来service提供的接口与它进行通讯。以媒体播放器为例子,我们还可以进行暂停、重新播放等操作10。 1.5.3 Content Provider简介 安卓的操作系统和其他的操作系统有差别,我们需要记住数据在Android当中是private的,当然,这些数据包括文件数据和数据库数据,以及一些其他类型数据。一个Content Provider类实现了一组标准的方法接口,从而能够让其他的应用保存或读取此Content Provider的各种数据类型,即一个程序实现一个Content Provider的抽象接口将自己的数据暴露出去17。外界无法看到,也不需看到这个应用暴露的数据是如何存储的在应用中,用数据库存储还是文件存储,或者是通过网上获得,这都不是很重要,重要的是外界可以通过这一套标准而统一的接口和程序里面来处理数据。可以读取程序数据,该方案可以删除程序数据,当然中间会涉及一些权限问题4。1.5.4 Intent简介 Intent是一种运行时间绑定(run time binding)机制,其可以连接程序的两个不同的部件运行的结合方式。通过Intent,你的应用率程序可以请求或表达意愿到安卓,安卓选择适当的组件来请求是根据意愿的内容来。例如,有一个Activity要打开Web浏览器查看网页的内容,那么Activity只需要发出WEB_SEARCH_ACTION这个请求给Android,Android会根据Intent的请求内容,查询各个组件注册时声明的Intent Filter,找到网页浏览器Activity来浏览网页12。 Android的三个基本组有1.Activity,2.Service,3.Broadcast Receiver。它们都是通过Intent机制激活的,而不同类型的组件有传递Intent的不同方式。如果要激活一个新的Activity,或者让一个现有的Activity执行新的操作,可以通过调用Context.start Activity或者Activity.start Activity For Result方法6。这两个方法需要传入的Intent参数也称为Activity Action Intent(活动行为意图),根据Intent对象对目标Activity描述的不同,来启动与之相匹配的Activity或传递信息。如果要启动一个新的服务,或者向一个已有的服务传递新的指令,调用Context.start Service方法或调用Context.bind Service方法将调用此方法的上下文对象与Service绑定。通过Context.send Broadcast、Context.send Order Broadcast和Context.send-Stick Broadcast这三个方法可以发送Broadcast Intent。Broadcast Intent发送后,所有已注册的拥有与之相匹配Intent Filter的Broadcast Receiver就会被激活1。这种机制被广泛运用于设备或系统状态变化的通知,一个常见的例子是,当Android的电池电量过低时,系统会发送Action为BATTERY_LOW的广播,接着任何可匹配该Action的Intent Filter注册的Broadcast Receiver都会各自运行自定义的处理代码,比如关闭设备的WIFI和GPS以节省电池消耗7。第二章 需求分析系统分析是产品开发的重要环节,该阶段虽然没有功能代码的撰写与产出,但是只有确定产品方向之后才能对整个设计有较清晰的思路。在项目调研阶段,我通过查找GooglePlay应用查询搜索的排行榜,分析国外用户对于桌面组件类应用最大的功能需求点在哪里。并且通过分析所有的功能点选择可行性和有意义的功能进行实现。并且将功能安置于合理的位置也是十分重要以及十分需要考量的。2.1 用户需求分析通过GooglePlay市场调研预定了20项选择功能分别为:闹钟、手电、日历、新闻、音乐、视频、天气、时钟、相机、社交聊天、购物、读书软件、锁屏、壁纸、桌面管理、便捷开关、车辆限号、记事本、浏览器、电量管理。因为考虑到开发成本以及市场竞争性我们筛除了部分功能,例如已经在市场中有较多成型产品以及有较稳定用户群的桌面、锁屏、壁纸和社交功能。其开发成本十分高,但是无法超越或者与当前市场中的成型产品竞争。最终考虑功多种因素及现有条件选择其中9项功能进行桌面组件的展示分别是:天气、闹钟、手电、日历、新闻、时钟、车辆限号、便捷开关、电量管理。2.2 软件流程图用户首先需要下载安装该应用,之后打开软件点击设置按钮进入设置界面进行基本设置吧,下一步是在桌面添加组件,最后可以下载其他样式组件。图 2-1 软件流程图2.3 用例图用户在下载并安装软件之后,可以在设置界面进行一些个性化设置,例如选择城市或者使用定位到的城市,以及网络信息刷新时间间隔。在设置之后退回主界面点击应用则会出现如何在桌面添加widget的帮助流程图,方便用户可以快捷的在桌面添加上改款便捷组件。在添加组件之后改款应用便可正常使用,同时用户仍可在主界面通过更多样式按钮找到其他样式的组件的下载地址。图 2-2 用例图2.4 软件功能模块列表上文中所提到的最终确定的9个功能弄,将分为细化功能进行开发,并将细化功能分为个模块,下面将功能归类到大模块中:2.4.1 系统信息模块A. 闹钟 B. 日历 C. 时钟 D. 电量管理2.4.2 天气模块A. 天气情况 B. 当前温度 C. 高低温 D. 多天预报 E. 日出日落时间 F.风速 G. 风向 H.空气湿度 I.空气质量指数2.4.3 开关模块A. 手电开关 B. WIFI开关 C. 数据流量开关 D. 静音模式开关2.4.3 网络信息模块A. 车辆限号 B. 新闻第三章 总体设计3.1 功能设计3.1.1 组件功能组合由于考虑到功能较为全面,不能同时集中于一个组件,所以将功能选择性组合为多个组件。将功能模块抽为依赖库让多个组件同时依赖该公共库实现代码复用。最终组合为15款不同的组件,但是共同拥有的功能是天气以及时钟功能。所以将产品的主要路线定义为多功能便捷天气桌面组件。3.1.2 部分组件介绍根据功能的不同组合以及widget大小的不同,共有十五款不同功能以及不同大小的精美界面的widget,为了满足大部分用户的需求而设计。下面几款是在GooglePlay下载量较大的组件:组件一:如图3-1这是目前用户数量最多的一款样式,设计背景为半透明,可以透过widget看到桌面背景,同时在功能上十分齐全,除了基本的天气信息以为还包括电量闹钟以及日历事件,日出日落以及未来四天的天气预报数据。组件二:如图3-2这是一款带有表盘的widget设计,现在市场中还有许多用户习惯在看时间时使用表盘来向他们传达信息,这款widget就满足了这一部分用户。目前在GooglePlay中极少能看见表盘类的应用,因为他在实现上较为有难度,表盘转动的精准度决定了用户对信息的获取是否准确。这个widget的布局中是通过将三张大小一样的图片包括表盘分针和时针通过相对布局叠加到一起,并定时旋转其中的分针和时针图片而实现的。 图 3-1 组件一 图 3-2 组件二组件三:如图3-3这个widget是一个4*4的大widget其中包含了大量的信息,但是最为独特的是他的四个开关。现在只能手机功能越来越强大,但是在功能强大的同时不可避免的带来了手机使用的繁琐,这个widget将静音、手电、数据流量开关以及wifi开关这四个按钮放在桌面widget中方面用户进行快速得开启和关闭。特别是手电筒开关,在部分手机中手电功能可以较容易找到但是打开手电也十分麻烦,在其他一些手机甚至很难找到手电筒。所以将手电按钮放在桌面,更大得便捷了用户使用手电这一功能。该功能是这个widget的独有功能是通过调用系统的camera来实现的。还有静音功能能快速得在开会前将手机调节至静音。组件四:如图这个widget虽然只有4*2的大小但是容纳了十分丰富的信息。有六天的天气预报以及最重要的城市车辆限号功能。该功能需要与服务端合作完成,服务端通过爬虫将网站信息爬去并解析成为借口供客户端使用。该widget布局形象采用卡片形象将信息很好的划分,虽然信息量较大但是读取时并没有感到吃力。组件五:如下图这是唯一一款包含整个月日历的组件,同时包含闹钟限号以及电量管理功能,这款组件大大节省了习惯每天看日历以及未来天气预报的用户的时间,十分便利。 图 3-3 组件三 图 3-4 组件四 图 3-5 组件五 以上5个widget是在十几个widget中较为突出和功能较为独特典型的widget,十几款widget投放进入GooglePlay得到用户一致好评。在众多风格不同的组件中让用户更容易找到适合自己使用习惯的组件。3.2程序结构设计整体结构如图3-6,通过GPS定位和IP定位获取经纬度,再通过Google map和高德的接口得到城市数据。在获取到城市数据之后进行数据请求以及解析并填充。图 3-6 项目结构图3.3 操作指南首先根据以上添加widget的方法,添加应用CurrentWeather,在android模拟器的桌面可以看到以下widget。chengdu,china是用户选择的城市中国成都,右边的按钮用于修改要进行天气预报的城市。Haze是天气状况,表示是雾天气,下面的两行分别显示当天广州的温度和湿度。点击“改变城市”按钮,弹出如图3-7,3-8画面:在输入框中输入城市,点击提交,即可更换城市,并关闭本页面,回到桌面。 图 3-7 桌面组件显示 图 3-8 搜索城市界面第四章 详细设计与实现4.1 模块设计1. 基于Android的桌面便捷组件:基于Android,brocasereceiver接收到enable等广播会在系统widget列表显示并添加到桌面2. 定位服务:通过gps定位和ip定位获得用户所在位置经纬度,并集成Google map服务以及高德地图定位服务,获得城市名称。存储城市名称以及经纬度,用于数据请求3. 常驻定时服务:通过Androidreceived常驻于后台,每分钟调用刷新界面线程,整点时判断是否更新天气等网络数据。4. contentresolver获取系统应用数据功能模块:通过Android提供的contentresolver类及方法,跨应用获取其他应用数据。包括系统应用中的闹钟日历等。5. http请求功能模块:单独启动线程通过httprequst进行网络请求,并做失败重试机制。6. JSON、XML数据解析将http请求到的结果string转化为json或xml根据与服务器端制定的协议进行解析,将数据剥离出来。以便使用。7. 数据存储preference功能模块:Android提供的preference类可以将各种数据高效快速以xml格式存储于应用文件中。并可通过key快速读取。该模块用于存储网络请求回来的已解析后的数据,并供应用随时读取使用。8. 天气数据对象填充单例模式:将天气数据统一到一个单独的类中,并通过单例模式规范该类。在应用中可以任意地方随时取用公共共享的单例天气数据类。(weatherinfoloder)9. 桌面布局模块:单独建立15个modul通过不同的widget布局编写不同的优美的桌面组件,这15个modul共同继承同一个lib,从lib调用所需要的数据以及方法。10. 刷新布局服务:用于被定时服务调用,功能是刷新布局。每分钟一次保证widget中的时间模块正常运转。该方法会刷新数据并发送到modul中单独的widget类中。11. 数据统计模块:应用中集成了Google Analytics用于统计用户留存已经用户行为和热点事件,以及追踪用户使用过程的bug及时修复更新。通过ga数据能更好的完善应用使应用更加贴合用户需求。4.2 网络功能的实现安卓可以使用下面两种网络接口:4.2.1 标准Java接口说明.*下面提供了访问 HTTP 服务的基本功能。使用这部分接口的基本操作主要包括:1.创建 URL 以及 URLConnection / HttpURLConnection 对象2.连接参数3.到服务器4.服务器写数据5.服务器读取数据import java.io.InputStream; import java.io.OutputStream; import .URL; import .URLConnection; import .HttpURLConnection; try / 创建一个 URL 对象 URL url = new URL(your_url); / 创建一个 URL 连接,如果有代理的话可以指定一个代理。 URLConnection connection = url.openConnection(Proxy_yours); / 对于 HTTP 连接可以直接转换成 HttpURLConnection, / 这样就可以使用一些 HTTP 连接特定的方法,如 setRequestMethod() 等 /HttpURLConnection connection = (HttpURLConnection)url.openConnection(Proxy_yours); / 在开始和服务器连接之前,可能需要设置一些网络参数 connection.setConnectTimeout(10000); connection.addRequestProperty(User-Agent, J2me/MIDP2.0); / 连接到服务器 connection.connect(); / 往服务器写数据,数据会暂时被放到内存缓存区中 / 如果仅是一个简单的 HTTP GET,这一部分则可以省略 OutputStream outStream = connection.getOutputStream(); ObjectOutputStream objOutput = new ObjectOutputStream(outStream); objOutput.writeObject(new String(this is a string.); objOutput.flush(); / 向服务器发送数据并获取应答 InputStream in = connection.getInputStream(); / 处理数据 . catch (Exception e) / 网络读写操作往往会产生一些异常,所以在具体编写网络应时 / 最好捕捉每一个具体以采取相应措施 4.2.2 Apache接口说明 Apache HttpClient 是一个开源项目,来弥补 .* 缺乏灵活性,为客户端的HTTP编程提供高效、最新、功能丰富的工具包支持。Android 平台引入了 Apache HttpClient 的同时还提供了对它的一些封装和扩展,例如设置缺省的HTTP超时和缓存大小等。早期的 Android 曾同时包括 Commons HttpClient (mons.httpclient.*) 和 HttpComponents (org.apache.http.client.* ),不过当前版本 (1.5) 中开发者只能使用后者,也就是说类似以下的一些类:使用这部分接口的基本操作与 .* 基本类似,主要包括:创建 HttpClient 以及 GetMethod / PostMethod, HttpRequest 等对象设置连接参数执行 HTTP 操作处理服务器返回结果import org.apache.http.HttpEntity; import org.apache.http.HttpHost; import org.apache.http.HttpResponse; import org.apache.http.auth.AuthScope; import org.apache.http.auth.UsernamePasswordCredentials; import org.apache.http.client.methods.HttpGet; import org.apache.http.conn.params.ConnRoutePNames; import org.apache.http.params. HttpConnectionParams; import org.apache.http.client.params. HttpClientParams; try / 创建 HttpParams 以此用来设置 HTTP 参数(这一部分不是必要的) HttpParams params = new BasicHttpParams(); / 设置连接超时和 Socket 超时,以及 Socket 缓存大小 HttpConnectionParams.setConnectionTimeout(params, 20 * 1000); HttpConnectionParams.setSoTimeout(params, 20 * 1000); HttpConnectionParams.setSocketBufferSize(params, 8192); / 设置重定向,缺省为 true HttpClientParams.setRedirecting(params, true); / 设置 user agent HttpProtocolParams.setUserAgent(params, userAgent); / 创建一个 HttpClient 实例 / 注意 HttpClient httpClient = new HttpClient(); 是Commons HttpClient / 中的用法,在 Android 1.5 中我们需要使用 Apache 的缺省实现 DefaultHttpClient HttpClient httpClient = new DefaultHttpClient(params); / 创建 HttpGet 方法,该方法会自动处理 URL 地址的重定向 HttpGet httpGet = new HttpGet (http:/www.test_/); HttpResponse response = client.execute(httpGet); if (response.getStatusLine().getStatusCode() != HttpStatus.SC_OK) / 错误处理,例如可以在该请求正常结束前将其中断 httpGet.abort(); / 读取更多信息 Header headers = response.getHeaders(); HttpEntity entity = response.getEntity(); Header header = response.getFirstHeader(Content-Type); catch (Exception ee) / finally / 释放连接 client.getConnectionManager().shutdown(); 4.2.3 应用Java接口连接网络 该设计采用了Java接口来获取信息在网上。 在安卓应用中,要使用网络必须先在AndroidManifest.xml注册才能使用网络功能。所以其xml语句为 : uses-permission android:name=android.permission.INTENET/ 我是利用Google提供的Web Service来完成从网络获取天气信息任务的。 首先需要一个URL类表示我们要获取内容的网址 String aStrring=http:www.//ig/api?weather=+city; URL aURL=new URL(aString.replace( ,%20); 通过openStream()方法获取xml信息,将其作为一个参数传给xml解析器进行xml解析。4.3 实现xml及json的解析 xml的解析的实现是通过利用SAX。用SAX解析xml,我们需要一个SAXParser对象。 SAXParserFactory spf=SAXParseFactory.newInstance(); SAXParser sp=spf.newSAXParser(); 有了SAXParser实例,接下来要想办法读入xml文件。org.xml.sax.XMLReader为我们提供了这样一个接口,它的方法setContentHandler允许我们在读入xml之前注册一系列处理器。 /*从SAXParser获取XMLReader*/ XMLReader xr=sp.getXMLReader(); /*创建我们自己的内容处理器*/ ExampleHandler myHander=new ExampleHandler(); /*用内容处理器处理XMLReader*/ xr.setContentHandler(myHandler); 设置好内容处理器之后,就可以开始使用XMLReader读取xml内容,并通过myHandler对象返回从xml中获得的数据. /*XMLReader获取xml文件并进行解析*/ xr.pars(new InputSource(aURL.openStream(); XMLReader会便利读取xml文件中的所有内容,在读取过程中,将会依次触发事先注册好的xml内容处理器。要实现xml内容处理器,需要继承类org.xml.sax.helpers.DefaultHandler,它提供了startDocument(),endDocument(),startElement(),endElement(),Charators()等方法。继承DefaultHandler之后需要重写这些方法,一边有效的处理xml内容,其中各个方法被调用的情况如下: 在xml文件开始的地方会调用starDocument()方法,在文件结束的地方会调用endDocument()方法。Xml中的节点总是以tag./tag的方式组织起来的,因此当SAXParser解析到xml开头的tag时,starElement就会被调用。而当SAXParser解析到xml结尾的tag时,endElement就会被调用。 在xml文件中,我们常常在开始tag和结束tag之间放入数据,当SAXParser解析到中间数据时,方法charactors()就会被调用。 下面是我根据Google API返回的xml格式重写后的两个方法,1.startElement() 2.endElement()。public void startElement(String namespaceURI, String localNam

温馨提示

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

评论

0/150

提交评论