【Android论文栏目提醒】:网学会员在Android论文频道为大家收集整理了“Android平台与Web服务数据交互时运用Java反射机制解析数据的研究 - 开发文档“提供大家参考,希望对大家有所帮助!
Android 平台与 Web 服务数据交互时运用 Java 反射机制解析数据的研究 周 辉 胡 斌 吉首大学 信息管理与工程学院 湖南 张家界 427000 摘 要: 在时下流行的 A ndr oid 平台上研究应 用 Jav a 反射机制 提高开 发 A ndr oid 软 件的灵活性、可扩 展性 使得软 件系统具有自适应能力 并在运行时随外部环境的变化而改变自身 实现程 序的动态演 进。
介绍了反 射的概念和 Ja va 反射机制 对 A ndr oid 应用程序与 W eb 服 务进行 的 X ml 数据 交互 时。
采用 反射机 制实 现了 域对象 Domain Ob ject 信息的动 态解析并封装成 JavaBean 类供应用程序使用 并给出了具体实现方法实例。
关键词: Java 反射机制 Xml 数据交互 W eb 服务 A ndr oid 平台 中图分类号: T P312 文献标识码: A 文章编号: 1672 7800 2011 05 0014 03 类我们可以得到一个类的所有域以及域中的数据。
0 引言 2 java. lang. ref lect. M ethod 类 M ethod 提供关于 类或接 口上 单独某 个方 法的 信息。
随着移动技术 的不 断发 展
Android 平 台在 3 G 领域 使用 M et hod 类可以获得并调用 一个类 中的任意 方法 同持续走红 不少传 统 W eb 应用 系统 逐步向 移动 应用 方面 时还可获取方法所带的参数。
并 通过 Invoke 方法 调用该发展。
从而加大了 W eb 应用程序 与
Android 应用 程序之 方法。
间的数据交互。
如何高效 地将数据转化成 程序可用数 据 3 java. lang. reflect . Con struct or 类成为了
Android 应用 与 W eb 应 用之 间的 关键。
本文 在以 Con struct or 提供关于类的单 个构造 方法的 信息。
使Xml 数据格式交互数据的基础上结合 Java 反射机制和 An 用 Const ru ctor 类我们可以得到一个类的所有构造方法。
droid 平台的 Xml 解 析器 XmlPullParser 为减少代码的重 1. 2 Java 反射的操作步骤复和增强代码的复用及提高数据交互的效率进行研究。
使用 JAV A 反射机制的时候必须要遵循 3 个步骤: 是获得你想操作的类 的 java. lang. Class 对象。
在1 Java 反射机制与
Android 平台 Xml 解析 运行中的 Java 程序 用 java. lang. Class 类来 描述 对象所 属类和实现接口的信息1. 1 Java 反射机制 是 调 用 Class 类 的 诸 如 getDeclaredM et hods 的 方 Java 反射机制是在运行状态中 动态获取类的信息以 法 以取得该类中定义的所有方法和域的反射对象列表及动态调用对象方法 的机制。
这 个机 制允许 程序在 运行 是利用 所取得的 方法和 域反 射对象 利用 来操作时通过 调 用 Ref lect ion A PIs 取 得任 何 一 个 已 知 名 称 的 这些信息。
Class 的内部信息 既 1. 3 XML Pull 解析技术 包括其修饰符、 基类、 所实现 的接口 等 也包 括 F ields A ndroid 并未 提 供对 Java SA X API 的支 持。
但是和 M eth od s 以及 Con struct or 的 所有 信息 并可 于运 行时 A ndroid 附 带 了 一 个 pu ll 解 析 器 其 工 作 方 式 类 似 于改变 fields 内容或调用 methods。
S AX。
它允许用户的应用程序代码从解析器中获取事件 Java 反射的实现 主要是依 赖 java. lang. reflect 包所 这与 SAX 解析器自动将事件推入处理程序相反。
提供的类。
其中最经常使用的是如下三个类: 1. 3. 1 XM L Pu ll 的工作原理 1 java. lang. reflect . Field 类 XmlPullParser 提供了开始元素 和结束元 素。
首先创 Field 提供有关类或接口的单个 域的信息。
利 用这个 建一 个 XmlPullParser 对 象 pareser Xml. n ewPullPars基金项目: 大学生研究性学习和创新性实验计划项目 JSU CX 2010 5作者简介: 周辉 1987- 男 湖南娄 底人 吉首大学信息管理与工 程学院本科 生 研 究方向为软 件工程 胡斌 1972- 男 湖南张 家 界人 硕士 吉首大学信息管理与工程学院副教授 研究方向为软件工程、 数据挖掘。
第5期 周 辉 胡 斌: A ndr oid 平台与 Web 服务数据交互时运用 Java 反射 机制解析数据的研究 15er 并设置 Xml 文件输入流。
然后当某个元素开始时 我 2. 2
Android 应用和 Web 服务数据交互示意图们可以调用 parser. get Enven tT ype 判 断 当前 读 取 的元素 类 型。
元 素 类 型 有 XmlPullParser. ST A RT _ DOCUM EN T XmlPu llPars er. END _ DOCU MENT XmlPullParser. ST ART _T A G XmlPullParser. END_T A G 然后调用 parser. getN ame 获取 当前 元素 的 标签 名 调 用 parser. getA tt ribut eN ame 获 取 元 素的 属 性 名称 和 parser.get At tribut eValue 获取该属性的内容或调用 pars erparser. nextT ext 从 XM L 元素中 提取标 签里 的内容。
当读 图2
Android 应用和 Web 服务数据交互取到 END_DOCU M ENT 时 Xml 文件读取事件结束。
1. 3. 2 常用的 XM L Pu ll 的接口和类 XmlPullParser: XM Lpull 解 析 器 是 一 个 在 XM L Pull 3 Java 反射机制配合 XmlPullParser 解析 XmlV 1 API 中提供了定义解析功能的接口。
数据的设计思路 XmlSerializer: 它是一个 接口 定 义了 Xml 信 息 集的 本 文 为 An droid 平 台 与 w eb 服 务数 据 交 互 时 运 用序列。
JA VA 反射机制配合 XmlPullParser 解析器解析交互数据 XmlPullParserFactory: 这 个 类 用 于 在 XM Pu ll V1A PI 中创建 XM LPull 解析器。
提供设计思路。
文中用到的技术在前文均以做了讲解 若 有不懂请参考文献或相关资料。
XmlPullParserEx cept ion: 抛出 单 一的 XM L Pull 解析器异常。
3. 1 设计思路 关的错误。
设计前提: 利 用 平台 之间 两 个应 用交 互 数据 的 协议 这 里指 SOA P 协议 编写 JavaBean 类便于 将交 互的数1. 3. 3 XM LPullParser 的实现 据进行封装。
我们的设计思 路是 首先利用 反射取 得动态 JavaBean 对象中我们需要的域及对应的值 然后根据 Xml 解析的数 据封装到对应的动态 JavaBean 对象中。
具体思路如下: 在解析 Xml 类的构造方法中 获取直 接继承此 类的所 有类的泛型类型 然后获取继成类的第一泛型类型并将其 转换成 Clas s 对象 赋予对 应的 属性。
在 解析 Xml 方 法中 利用 XmlPull 解析器解析 Xml 文件 解析流程见图 将 获得 T ag 名称或属性名 称以及对 应的值 数据传入 数据封 装方法 该方 法中 利用 反射 机制 获取动 态 JavaBean 类的 所有字段和属性以及动态 JavaBean 类的所有方法。
图1 XmlPullParser 实现流程 因为对方法和对字段 的未知 利用 反射机 制以 获得动 态 JavaBean 类的所有信息。
这样将解析 出来的数 据封装2
Android 应用和 Web 服务数据交互过程 到对应的动态 JavaBean 类中以成为可 能。
利用以 解析出 来的 T ag 名称 或属 性名 称及 相应 的值 数据 分 别循 环遍2. 1 数据交互类型 历 Field 数组 和 M ethod 数 组 并 逐一 取 得 属 性 名 和方 法
Android 应用程序和 Web 服务应用程序之间数据交互 名 同时根据 T ag 名 称或属 性名 称组合 成 Set 方法 名 形常用类型有如下 3 种: 纯文本数据、 数据、 数据。
Xml Json 式为 S et Xxx 就可以匹配到动态 JavaBean 类中相同的 S et 纯文本数据交互后 可以直 接应用 到程 序中 但 是数 方法 最后将对应的值 数据生 成 St ring 对象 这里 将所有据的可靠性 数据的容 量多相对 较小 J son 数 据交互 若应 值数据的类性定义 St ring 类型 利用反 射机制 调用该 S et用到
Android 的应用程序中 需要 按照 An droid 平 台提供 方法 就可以 将解 析的 值数 据封 装到动 态 JavaBean 类中的 Json 数据解析器解析后才 可以应 用 而在 Web 服务上 与 T ag 名称相同 的属性字段 中。
从而将封装 的数据交给则需要导入相应的 Jar 包并对 Json 数据解析后方可使用。
应用程序使用 最终完成了两者之间的数据交互。
Json 数据有解析速度快 容量较大 的特点 但是 Json 数据 3. 2 利用反射机制和 XmlPullParser 解析器解析 xml 数据的拼装比较麻烦 当交互大量数据 时就显得 臃肿繁 琐。
Xml 具体实现数据交互无论
Android 平台还是 Web 服务 多需经 过相应 3. 2. 1 解析 xml 类和其构造方法的解析器解析后才可 使用。
Xml 数据 交互不 仅交互 容量 pub lic class ParseXml T 大 解析便捷还具有拼装简单、安全性高等特点。
privat e Class T clazz 16 软件导刊 2011 年 pub lic ParseXml 的所有方法 包括继承 Paramet erizedT ype pat y ParameterizedT ype f or F ield f : f s t his. getClass if f . getN ame . equ als name . getGenericSuperclass / / 获 取 直接 继 承此 类 String frist name. su bstring 0 1 的所有类的泛型类型 St ring methodName set frist . toU pper / / 获取集成类的第一泛型类型 Case t his. clazz Clas s T pat y. getA ctualT yp eArgu name. subs trin g 1 ment s 0 f or M eth od m : ms if m. get Name . equals methodName / / 获取 meth od 的参数类型3. 2. 2 解析 xml 数据的方法 Class cc m. get Paramet erT ypes Object pub lic List T parsing Inp utSt ream inSt ream objs new Ob ject cc. length S trin g encod int count 0 L ist T t s null for Clas s c : cc XmlPullParser parser Xml. newPullParser / / / / 将获的值转换成实例对象 此实例将所有的解析 XML 文件类的解析器 类型均设为 String 类型 parser. set In put inSt ream U T F- 8 objs count value int encodeT ype parser. getEventT ype count T t null wh ile encodeT ype XmlPullParser. EN D_ DOC m. invok e t ob js / / 调用 method 方法U M EN T break sw it ch encodeT ype case XmlPullParser. S T ART _DOCU M ENT : t s new ArrayL ist T break break case XmlPullParser. S T ART _T AG: if clazz. getS impleName . compareT oIgnore Case parser. get Name 0 / / 当开始 标签名 称和JavaBean 类名相同时实例化对象 4 结束语 t clazz. new Ins tance 本文研究了
Android 平台与 Web 服 务进行数 据交互 / / 此处省略 xml 解 析时 其它标 签或属 性的 时运用 Java 反射机制配合 Xml 解析 。
解析代码 目的是为了减少 数据转 化的复 杂性。
从 而达 到便捷 excuteInvoke name value t / / 将获 得的 和提高程序的高扩展 性。
该问题 解决 了平台 与平 台之间标签名称或属性名称和对应的值数据交与封装数据方法 数据交互协议变动后 不需要修 改原有 的代码 只需 在新协 case XmlPullParser. END_T AG: 议的基础上新建 JavaBean 类 并继承实现 Xml 解析类 使 得软件扩展性和代码 的复用 性提高。
该方案 还可 以应用 / / 此处省略 x ml 解析时遇到结束标签的处理 不同平台之间的数据交互和不同的数据协议的数据交互。
encodeT ype parser. nex t 参考文献: ret urn t s 1 李瑞花. 基于
Android 的 XM L 解析技术 的分析 J . 计算 机时代 2010 12 . 2 余志龙 陈小凤 等.
Android SDK 开发范例大全 M . 北京: 人民邮3. 2. 3 封装解析数据方法 电出版社 2009. pub lic void excut eInvok e String name S tring value 3 潘彬斌 王成良. Java 反射机制简化 Struts 框 架逻辑控制 J . 软件T t 时空 2008 12 . / / clazz 的所有字段 和变量 4 美 BRU CE E CKE L. J ava 编程 思想 M . 候捷 译. 北京: 机械工 业出版社 2002. Field fs clazz. new Inst an ce . getClass . 5 李刚. Struts2 权威指南 M . 北京: 电子工业出版社 2008.get DeclaredFields 6 盖索林 王世江. Google
Android 开发入 门指南 M . 北 京: 人民邮 M ethod ms clazz. get M et hods / / clazz 电出版社 2009. 责任编辑: 余 晓