




已阅读5页,还剩43页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
Android 平台天气预报 widget 的设计与实现 Android 平台天气预报 widget 的设计与实现 诚 信 声 明 我声明 所呈交的毕业论文是本人在老师指导下进行的研究 工作及取得的研究成果 据我查证 除了文中特别加以标注和致 谢的地方外 论文中不包含其他人已经发表或撰写过的研究成果 也不包含为获得其他教育机构的学位或证书而使用过的材料 我 承诺 论文中的所有内容均真实 可信 毕业论文作者签名 签名日期 年 月 日 Android 平台天气预报 widget 的设计与实现 Android 平台天气预报 widget 的设计与实现 摘摘 要要 本文对基于 Android 平台的 widget 开发技术进行了分析和研究 先简要介绍了 Android 开发必备基础知识 再切入软件的具体实现 过程 软件的实现是利用网络接口和 Google API 获取网络 xml 文件 然后通过 xml 文件解析取得城市天气预报信息 最终使用 widget 制 作方法 利用 RemoteViews 等技术完成桌面部件 关键词 关键词 Android 桌面小部件 天气预报 Android 平台天气预报 widget 的设计与实现 the design and implementation of weather forecasting widget on Android platform ABSTRACT This paper analyses and researches the development technique on the Android platform It first introduce the basic knowledge that is necessary for Android development And then it introduce the concrete implementation of the software The software uses network interface and Google API to get xml document Then it parse the document to get the weather information of the city Finally I use technique such as RemotViews to implement the widget Keywords Android widget weather forecast Android 平台天气预报 widget 的设计与实现 目 录 第第 1 章章 绪论绪论 1 1 1 项目背景 1 1 2 研究现状 1 1 3 论文组织 2 第第 2 章章 ANDROID 开发环境开发环境 3 2 1 ANDROID开发环境搭建流程 3 2 1 1 安装Eclipse ADT Plugin插件 3 2 1 2 安装Android SDK 4 2 1 3 更新Adroid SDK 5 2 1 4 配置Android模拟器 6 2 2 开发工具 ECLIPSE介绍 7 第第 3 章章 ANDROID 程序设计基础程序设计基础 9 3 1 系统结构 9 3 1 1 应用程序 9 3 1 2 应用程序框架 10 3 1 3 库和运行环境 11 3 2 ANDROID应用程序组成 11 3 2 1 Avtivity介绍 11 3 2 2 Broadcast Intent Receiver介绍 12 3 2 3 Service介绍 13 3 2 4 Content Provider介绍 13 3 2 5 Intent介绍 14 3 3 ANDROID应用程序工程文件 16 第第 4 章章 天气预报天气预报 WIDGET 的设计的设计 18 4 1 网络功能实现 18 4 1 1 标准Java接口 18 4 1 2 Apache接口 19 4 1 3 使用Java接口连接网络 22 4 2 XML解析的实现 22 4 3 制作WIDGET应用程序 26 4 3 1 源文件组织 28 4 3 2 类之间的协作 28 4 3 3 CurrentWeather类的实现 29 4 3 4 edit类的实现 30 4 3 5 WeatherHandle类的实现 30 第第 5 章章 相关实现技术与体会相关实现技术与体会 32 Android 平台天气预报 widget 的设计与实现 5 1 添加WIDGET 32 5 2 REMOTEVIEWS的局限 33 5 3 在WIDGET中显示图片 34 5 4 在 ANDROIDMANIFEST XML中进行权限声明 34 5 5 为WIDGET中的按钮设置 ONCLICK事件 35 5 6 利用 BUNDLE实现消息的传递 36 5 7 在 APPWIDGETPROVIDER类中获取 INTENT的附加信息 36 5 8 软件使用 37 结论结论 40 致谢致谢 41 参考文献参考文献 42 3DII 技术研究和应用实现 1 第 1 章 绪论 1 1 项目背景 2009 年 1 月 7 日 工业和信息化部为中国移动 中国电信和中国联通 发放 3 张第三代移动通信牌照 此举标志着我国正式进入 3G 时代 中国 3G 正式商用和规模建网 决定了中国基于 Android 的应用程序开发将会处 于一个蓬勃发展时期 Android 是 Google 于 07 年 11 月 5 日宣布的基于 Linux 平台开源手机 操作系统名称 号称是首个为移动终端打造的真正开放和完整的移动软件 它包括操作系统 用户界面和应用程序 移动电话工作所需的全部 软件 而且不存在任何以往阻碍移动产业创新的专有权障碍 谷歌与开放 手机联盟合作开发了 Android 这个联盟由包括中国移动 摩托罗拉 高 通 宏达和 T Mobile 在内的 30 多家技术和无线应用的领军企业组成 Android 有如下多个优势 1 开放性 2 强大的 Google 作为传媒平台 3 较为成熟的 Linux 系统 4 较强的可移植性和强大的操作性 1 2 研究现状 widget 作为桌面上网的新模式 Widget 在 2007 年已形成较大市场规 模 并为广告商及创业公司带来新的商机 但是为社交网站开发 Widget 3DII 技术研究和应用实现 2 的软件开发人员却表示 Widget 的影响力被严重低估 Android 中的 Widget 是 Android 1 5 以后加入的一个特性 允许程序显 示一些常用而又重要的信息在用户的 Home screen 桌面主屏 上 简单的说就是有两个特点 一是可以添加到 Home screen 上 二是按照一定的时间进行内容更新 以上两点就是由 android 系统中的 AppWidget Framework 框架 来支持 完成的 当最基本的控件 如 Clock 和 Picture Frame Home Screen 随第一款 Android 手机的发布后 Android 用户就开始尝试编写各种应用 Widget 小 工具 了 随着 Widget API 的公开 为开发人员带来了全新有趣的开发模 式 除了传统的电话应用外 还可以做其它方面的应用开发 1 3 论文组织 本文主要在介绍 Android widget 应用程序开发的要点 以及本人这段 时间学习 Android 开发的体会 本文在第二章介绍 Android 开发环境的搭 建 在第三章介绍 Andoid 开发基础知识 第四章介绍天气预报桌面小程 序的设计与实现 最后一章介绍在软件设计过程中遇到的难题和相应解决 方案 3DII 技术研究和应用实现 3 第 2 章 Android 开发环境 2 1 Android 开发环境搭建流程 Android 开发首先需要搭建完整的开发环境 由于软件均是基于 Dalvik Java Virtual Machine 运行的所以 Google 官方推荐使用主流的 Java 开发 IDE Eclipse 我们需要下载必要的开发组件 1 Java 运行时库 JRE 由于 Eclipse 使用 Java 开发 所以需要它才可 以正常运行 IDE 2 Eclipse 集成开发环境 官方提供的 Android 开发插件 ADT Plugin 是 基于 Eclipse 编写的 当然用户可以使用 NetBean JBuilder 当作代码编辑 器使用 但目前没有完整的调试集成 3 Eclipse ADT Plugin 插件是 Android Develop Tool Kit 的插件 用户需 要安装它才能在 Eclipse 中建立和调试 Android 程序 4 Android SDK 它包含了完整的 Android 模拟器 Android 开发文档 和调试工具 Google 官方也会定时更新 2 1 1 安装 Eclipse ADT Plugin 插件 首先我们将下载的 JRE 安装 运行 Eclipse 开发环境 安装 Eclipse ADT Plugin 选择 Help Soft Updates Find and Install 选择 Available Software 标签页 点击 Add Site 按键 添加 update 站点 https dl 3DII 技术研究和应用实现 4 这时窗口中新增了 https dl 中该项 点击 Install 按键即可下载 2 1 2 安装 Android SDK 将安装的 Android SDK 包解压 运行 Eclipse 选择 Window Preferences 选择 Android 如下图 点 Browse 按钮选择 SDK 解压后的路径 为了在 DOS 控制台中直接使用 SDK 的工具 可以将 SDK 的目录添加 3DII 技术研究和应用实现 5 到 Windows 的 path 环境变量中 在桌面上右击 我的电脑 依次点击 属性 高级 环境变量 双击 系统变量 里面的 Path 项 将 Android SDK 中 tools 目录的完整路径添加到这里 2 1 3 更新 Adroid SDK Android SDK 的升级如此之快让人有点招架不住 为了使用 SDK 的新 特性 有必要将其升级 第一步 打开 Eclipse 工具 在工具栏里找到 这个按钮 如果你没有找到也 不要着急 你在菜单栏 Window Android SDK and AVD Manager 里 也能找到这个按钮 点击之弹出如下对话框 第二步 选择 Availabe Package 这一标签 然后将出现如下对话框 记得要勾选 那个复选框 3DII 技术研究和应用实现 6 然后选择 Installed Packages 点击 Update ALL 按钮即可升级 2 1 4 配置 Android 模拟器 1 首先打开 Android SDK and AVD Manager 如图所示 2 点击左边的 Virtual Devices 选项 在点击右边的 New 按钮 来新 建一个 AVD 3 在 name 标签处填写 AVD 的名字 Target 标签处选择 api 等级 3DII 技术研究和应用实现 7 在 size 标签处填写要创建的 SD 卡的大小 在 skin 标签中设置模拟器的 风格 4 到这里 还需要配置模拟器运行的 AVD 操作步骤 点击 Run 选择 Open Run Dialog 菜单命令 打开对话框 如图 2 33 所示 3DII 技术研究和应用实现 8 5 双击 Run 对话框左边的导航器中的 Android Application 菜单命令 创建一个 Android 项目运行配置 在右边的 Name 文本框中输入 Android 项目运行配置的名字 在 Android 选项卡中的 Project 文本框中输入要运 行的 Android 项目 同样可以点击右边的 Browse 按钮来选择 Android 项 目 2 2 开发工具 Eclipse 介绍 Eclipse 是一种可扩展的开放源代码 IDE 2001 年 11 月 IBM 公司捐 出价值 4 000 万美元的源代码组建了 Eclipse 联盟 并由该联盟负责这种工 具的后续开发 集成开发环境 IDE 经常将其应用范围限定在 开发 构建 和调试 的周期之中 为了帮助集成开发环境 IDE 克服目前的局限性 业 界厂商合作创建了 Eclipse 平台 Eclipse 允许在同一 IDE 中集成来自不同 供应商的工具 并实现了工具之间的互操作性 从而显著改变了项目工作 3DII 技术研究和应用实现 9 流程 使开发者可以专注在实际的嵌入式目标上 Eclipse 框架的这种灵活性来源于其扩展点 它们是在 XML 中定义的 已知接口 并充当插件的耦合点 扩展点的范围包括从用在常规表述过滤 器中的简单字符串 到一个 Java 类的描述 任何 Eclipse 插件定义的扩展 点都能够被其它插件使用 反之 任何 Eclipse 插件也可以遵从其它插件 定义的扩展点 除了解由扩展点定义的接口外 插件不知道它们通过扩展 点提供的服务将如何被使用 利用 Eclipse 我们可以将高级设计 也许是采用 UML 与低级开发工具 如应用调试器等 结合在一起 如果这些互相补充的独立工具采用 Eclipse 扩展点彼此连接 那么当我们用调试器逐一检查应用时 UML 对话框可 以突出显示我们正在关注的器件 事实上 由于 Eclipse 并不了解开发语 言 所以无论 Java 语言调试器 C C 调试器还是汇编调试器 都是有效的 并可以在相同的框架内同时瞄准不同的进程或节点 Eclipse 的最大特点是它能接受由 Java 开发者自己编写的开放源代码 插件 这类似于微软公司的 Visual Studio 和 Sun 微系统公司的 NetBeans 平台 Eclipse 为工具开发商提供了更好的灵活性 使他们能更好地控制自 己的软件技术 eclipse 是一款非常受欢迎的 java 开发工具 使国内的用户 越来越多 实际上使用它的 java 开发人员是最多的 缺点就是较复杂 对 初学者来说 理解起来比较困难 3DII 技术研究和应用实现 10 第 3 章 Android 程序设计基础 3 1 系统结构 Android 作为一个移动设备开发平台 其软件层次结构包括了一个操 作系统 中间件和应用程序 其框架如下图所示 其软件层析结构自上而下可以分为以下几个层次 1 应用程序 Application 2 应用程序框架 Application Framework 3 各种库 Libraries 和 Android 运行环境 RuntTime 4 操作系统层 OS 3 1 1 应用程序 Android 的应用程序通常涉及用户界面和用户交互 这类程序是用户 3DII 技术研究和应用实现 11 实实在在感受到的 Android 的应用程序目前以 Java 语言编写 Android 本身提供桌面 联系人 电话和浏览器等核心应用 同时应用程序开发者 可以根据应用程序框架层的 API 实现自己的程序 这也是 Android 开源的 巨大潜力体现 Android 这种开放而强大的平台给每一个程序开发者提供 了公平的机会 每一个开发者都可以加入移动互联的世界 共同推动移动 互联的发展 3 1 2 应用程序框架 普通的开发者可以使用 Android 核心应用程序的系统 API Android 的 应用开发框架涉及的非常巧妙 通过这套应用框架 各种组件可以被用户 的应用重复利用 各种服务也可以被各种应用重复应用 开发人员应该很 好地理解这套框架的工作机制 这样才能开发出更好的应用程序 下面列举应用框架的主要部分 1 一组 Views 这些 UI 组件包括列表 文本框 按钮等 通过这些 UI 组件 可以构建应用程序的试图部分 这部分也就是用户能看到的部分 2 ContentProviders 主要是提供一种机制 通过这种机制 各个应用 程序之间可以实现数据的互访和共享 3 Resource Manager 它负责管理非代码的访问 如本地图片资源 设计布局的 XML 文件等的访问 4 Notification Manager 它能让程序的将自己的警示信息显示在状态 栏上 例如 当有短信的时候 可以在状态栏上显示新短信的信息 5 Activity Manager 它管理应用的生命周期 并且提供应用页面退出 3DII 技术研究和应用实现 12 的机制 在 Android 应用中 一个应用一般都是多个页面组成 而每个页 面的单位就是 Activity 3 1 3 库和运行环境 Android 包括一些 C C 库 这些库能被 Android 系统的不同组件使用 他们通过 Android 应用程序框架为开发者提供服务 3 2 Android 应用程序组成 要进行应用开发 还需要对 Android 应用构造进行深入的分析 Android 应用程序由以下 4 个模块构造而成 Activity Broadcast Intent Receiver Service Content Provider 当然 也不是每个 Android 应用程序都必须由这 4 部分组成 它可以 根据开发者需求来进行组合 在这里还需要介绍 Intent 的概念和使用方法 他在应用程序的运行中 连接两个不同的组件 通过 Intent 你的程序可以向 Android 表达某种请求 或者意愿 Android 会根据意愿的内容选择适当的组件来请求 3 2 1 Avtivity 介绍 Activity 是最基本的模块 我们称之为 活动 在应用程序中 一个活 动 Activity 通常就是一个单独的屏幕 每一个活动都被实现为一个独立 的类 并且从活动基类中继承而来 活动类将会显示由视图控件组成的用 户接口 并对事件作出响应 大多数的应用都是由多个 Activity 显示组成 例如 对一个文本信息应用而言 第一个屏幕用来显示发送消息的联系人 3DII 技术研究和应用实现 13 列表 第二个屏幕用来写文本消息和选择收件人 第三个屏幕查看消息历 史或者消息设置操作等 这里的每一个屏幕就是一个活动 很容易实现从一个屏幕到一个新的 屏幕 并且完成新的活动 当一个新的屏幕打开后 前一个屏幕将会暂停 并保存在历史栈中 用户可以返回到历史栈中的前一个屏幕 当屏幕不再 使用时 还可以从历史栈中删除 简单理解 Activity 代表一个用户所能看到的屏幕 主要用于处理应 用程序的整体性工作 例如 监听系统事件 按键事件 触摸屏事件等 为用户显示指定的 View 启动其他 Activity 等 所有应用的 Activity 都继 承于 android app Activity 类 该类是 Android 提供的基层类 其他的 Activity 继承该父类后 通过父类的方法来实现各种功能 这种设计在其 他领域也较为常见 3 2 2 Broadcast Intent Receiver 介绍 可以使用 BroadcastReceiver 来让应用对一个外部的时间作出相应 例 如 当电话呼入这个外部时间到来的时候 可以利用 BroadcastReceiver 进 行处理 BroadcastReceiver 不能生成 UI 也就是说对用户是不透明的 用 户是看不到的 BroadcastReceiver 通过 NotificationManager 来通知用户这 些事情发生了 BroadcastReceiver 既可以在 AndroiManifest xml 中注册 也可以在运行时的代码使用 Context registerReceiver 进行注册 只要是注 册了 当时间来临的时候 即使程序没有启动 系统也在需要的时候启动 程序 各种应用程序还可以通过 Context sendBroadcast 将他们自己的 3DII 技术研究和应用实现 14 intent broadcasts 广播给其他应用程序 3 2 3 Service 介绍 Service 即 服务 的意思 既然是服务 那么 Service 将是一个生命周 期长而且没有用户界面的程序 比如一个正在从播放列表中播放歌曲的媒 体播放器 在这个媒体播放器应用中 应该会有多个 activity 让使用者可 以选择歌曲并播放歌曲 然而 音乐重放这个功能并没有对应的 activity 因为使用者会认为在导航到其他屏幕时音乐应该还在播放 在这个例子中 媒体播放器这个 activity 会使用 Context startService 来启动一个 service 从而可以在后台保持音乐的播放 同时 系统也将保持这个 service 一直执 行 直到这个 service 运行结束 另外 我们还可以通过使用 Context bindService 方法连接到一个 service 上 如果这个 service 当前还 没有处于启动状态 则将启动它 当连接到一个 service 之后 还可用 service 提供的接口与它进行通讯 以媒体播放器为例 我们还可以执行暂 停 重播等操作 3 2 4 Content Provider 介绍 Android 这个系统和其他的操作系统还不太一样 我们需要记住的是 数据在 Android 当中是私有的 当然这些数据包括文件数据和数据库数据 以及一些其他类型的数据 一个 ContentProvider 类实现了一组标准的方法 接口 从而能够让其他的应用保存或读取此 ContentProvider 的各种数据类 型 也就是说 一个程序可以通过实现一个 ContentProvider 的抽象接口将 自己的数据暴露出去 外界根本看不到 也不用看到这个应用暴露的数据 3DII 技术研究和应用实现 15 在应用当中是如何存储的 即用数据库存储还是文件存储 还是通过网上 获得 这一切都不重要 重要的是外界可以通过这一套标准而统一的接口 和程序里面的数据打交道 可以读取程序数据 也可以删除程序的数据 当然中间会涉及一些权限问题 3 2 5 Intent 介绍 Intent 是一种运行时绑定 runtime binding 机制 它能在程序运行 的过程中连接两个不同的组件 通过 Intent 你的程序可以向 Android 表 达某种请求或者意愿 Android 会根据意愿的内容选择适当的组件来请求 比如 有一个 Activity 希望打开网页浏览器查看某一网页的内容 那么这 个 Activity 只需要发出 WEB SEARCH ACTION 请求给 Android Android 会根据 Intent 的请求内容 查询各组件注册时声明的 IntentFilter 找到网 页浏览器 Activity 来浏览网页 Android 的三个基本组件 Activity Service 和 BroadcastReceiver 它们都是通过 Intent 机制激活的 而不同类型的组件有传递 Intent 的不同 方式 1 要激活一个新的 Activity 或者让一个现有的 Activity 执行新的操 作 可以通过调用 Context startActivity 或者 Activity startActivityForResult 方 法 这两个方法需要传入的 Intent 参数也称为 Activity Action Intent 活动 行为意图 根据 Intent 对象对目标 Activity 描述的不同 来启动与之相匹 配的 Activity 或传递信息 3DII 技术研究和应用实现 16 2 要启动一个新的服务 或者向一个已有的服务传递新的指令 调用 Context startService 方法或调用 Context bindService 方法将调用此方法的 上下文对象与 Service 绑定 3 通过 Context sendBroadcast Context sendOrderBroadcast 和 Context send StickBroadcast 这三个方法可以发送 BroadcastIntent BroadcastIntent 发送后 所有已注册的拥有与之相匹配 IntentFilter 的 BroadcastReceiver 就会被激活 这种机制被广泛运用于设备 或系统状态变化的通知 一个常见的例子是 当 Android 的电池电量过低 时 系统会发送 Action 为 BATTERY LOW 的广播 接着任何可匹配该 Action 的 IntentFilter 注册的 BroadcastReceiver 都会各自运行自定义的处理 代码 比如关闭设备的 WIFI 和 GPS 以节省电池消耗 Intent 一旦发出 Android 都会准确找到相匹配的一个或多个 Activity Service 或 Broadcast Receiver 作为响应 所以 不同类型的 Intent 消息不会出现重叠 BroadcastIntent 消息只会发送给 BroadcastReceiver 而绝不可能发送给 Activity 或 Service 由 startActivity 传 递的消息也只可能发送给 Activity 由 startService 传递的 Intent 只可能发 送给 Service Intent 对象抽象地描述了要执行的操作 其描述的基本内容可以分为 组件名称 Action 动作 Data 数据 Category 类别 Extra 附加 信息 和 Flag 标志位 6部分 3DII 技术研究和应用实现 17 Intent 分为显式 Intent 和隐式 Intent 对于明确指出了目标组件名称的 Intent 我们称之为 显式 Intent 对于没有明确指出目标组件名称的 Intent 则称之为 隐式 Intent Android 系统使用 IntentFilter 来寻找与隐式 Intent 相关的对象 显式 Intent 直接用组件的名称定义目标组件 这种方式很直接 但是 由于开发人员往往并不清楚别的应用程序的组件名称 因此 显式 Intent 更多用于在应用程序内部传递消息 比如在某应用程序内 一个 Activity 启动一个 Service 隐式 Intent 恰恰相反 它不会用组件名称定义需要激活 的目标组件 它更广泛地用于在不同应用程序之间传递消息 3 3 Android 应用程序工程文件 典型的工程文件如下图所示 与一般的 Java 项目一样 src 文件夹是项目的所有包及源文件 java res 文件夹中则包含了项目中的所有资源 比如 程序图标 drawable 3DII 技术研究和应用实现 18 布局文件 layout 常量 values 等 下面来介绍其他 Java 项目中没有 的 gen 文件夹中的 R java 文件和每个 Android 项目都必须有的 AndroidManfest xml 文件 R java 是在建立项目时自动生成的 这个文件是只读模式 不能更改 R java 文件是定义该项目所有资源的索引文件 AndroidManfest xml 文件则包含了该项目中所使用的 Activity Service Receiver 相当于应用的配置文件 在应用中是一个相 当重要的文件 3DII 技术研究和应用实现 19 第 4 章 天气预报 widget 的设计 4 1 网络功能实现 Android 可以使用以下两种网络接口 4 1 1 标准 Java 接口 下面提供了访问 HTTP 服务的基本功能 使用这部分接口的 基本操作主要包括 创建 URL 以及 URLConnection HttpURLConnection 对象 设置连接参数 连接到服务器 向服务器写数据 从服务器读取数据 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 3DII 技术研究和应用实现 20 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 1 2 Apache 接口 Apache HttpClient 是一个开源项目 弥补了 灵活性不足 的缺点 为客户端的 HTTP 编程提供高效 最新 功能丰富的工具包支持 Android 平台引入了 Apache HttpClient 的同时还提供了对它的一些封装和 3DII 技术研究和应用实现 21 扩展 例如设置缺省的 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 参数 这一部分不是必 需的 3DII 技术研究和应用实现 22 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 3DII 技术研究和应用实现 23 Header header response getFirstHeader Content Type catch Exception ee finally 释放连接 client getConnectionManager shutdown 4 1 3 使用 Java 接口连接网络 本设计使用 Java 接口从网络获取信息 在 Android 应用中 要使用网络必须先在 AndroidManifest xml 注册使 用网络功能 其 xml 语句为 我是利用 Google 提供的 Web Service 来完成从网络获取天气信息任务 的 首先需要一个 URL 类表示我们要获取内容的网址 String aStrring http www URL aURL new URL aString replace 20 通过 openStream 方法获取 xml 信息 将其作为一个参数传给 xml 解 析器进行 xml 解析 4 2 xml 解析的实现 我是通过利用 SAX 来实现 xml 的解析的 用 SAX 解析 xml 我们需要一个 SAXParser 对象 SAXParserFactory spf SAXParseFactory newInstance SAXParser sp spf newSAXParser 有了 SAXParser 实例 接下来要想办法读入 xml 文件 3DII 技术研究和应用实现 24 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 中的节点总是以 的方式组织起来的 因此当 SAXParser 解析到 xml 开头的 tag 时 starElement 就会被调用 而当 SAXParser 解析到 xml 结尾的 tag 时 endElement 就会被调用 3DII 技术研究和应用实现 25 在 xml 文件中 我们常常在开始 tag 和结束 tag 之间放入数据 当 SAXParser 解析到中间数据时 方法 charactors 就会被调用 下面是我根据 Google API 返回的 xml 格式重写后的两个方法 startElement 和 endElement public void startElement String namespaceURI String localName String qName Attributes atts throws SAXException Outer Tags if localName equals forecast information this in forecast information true else if localName equals current conditions this in current conditions true else if localName equals forecast conditions this in forecast conditions true else String dataAttribute atts getValue data Inner Tags of if localName equals city else if localName equals postal code else if localName equals latitude e6 else if localName equals longitude e6 else if localName equals forecast date else if localName equals current date time else if localName equals unit system if dataAttribute equals SI this usingSITemperature true SHARED Inner Tags within AND else if localName equals day of week if this in current conditions else if this in forecast conditions else if localName equals icon if this in current conditions this setIconURL dataAttribute 3DII 技术研究和应用实现 26 else if this in forecast conditions else if localName equals condition if this in current conditions this setCurrentCondition dataAttribute else if this in forecast conditions Inner Tags within else if localName equals temp f else if localName equals temp c this setCurrentTemp Integer parseInt dataAttribute else if localName equals humidity this setCurrentHum dataAttribute else if localName equals wind condition 可扩展 Inner Tags within else if localName equals low int temp Integer parseInt dataAttribute if this usingSITemperature 可扩展 else 可扩展 else if localName equals high int temp Integer parseInt dataAttribute if this usingSITemperature 可扩展 else 可扩展 3DII 技术研究和应用实现 27 Override public void endElement String namespaceURI String localName String qName throws SAXException if localName equals forecast information this in forecast information false else if localName equals current conditions this in current conditions false else if localName equals forecast conditions this in forecast conditions false 4 3 制作 widget 应用程序 桌面部件 widget 是一种利用 AppWidget 框架将应用程序的某个部件摆 放在桌面 以便于用户快速了解信息以及操作应用程序的桌面组件 如未 完成的日历项 音乐播放器的播放暂停和当前播放音乐的信息等 要为应用程序定义桌面部件 首先要在应用程序项目的 res xml 目录 下新建
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 入院评估课件
- 健康骨骼知识培训课件
- 俄罗斯政府课件
- 企业疫情期间安全培训课件
- 企业环境安全培训的作用
- 社区纪委考核管理办法
- 社区干部纪律管理办法
- 数字农业的新质生产力特征
- 2025国家能源集团招聘笔试历年参考题库附带答案详解
- 出租车防御性驾驶
- 排污许可培训课件
- 迪拜果蔬市场发展趋势与前景分析
- 2025年调饮师职业技能竞赛(省赛)考试题库(含答案)
- 购买邻居土地协议书
- 工程部员工绩效考核方案
- 新生美术体验课件
- 公司事故隐患内部报告奖励制度
- 人教部编版七年级语文上册教学计划(及进度表)
- Python工程应用-数据分析基础与实践课件-第3章
- 年满七十岁以上老年人驾考三力能力测试题库
- 集成电路测试指南
评论
0/150
提交评论