Android--数据解析
一、XML解析:
1、Pull 解析方式:
1)先获取到一个 XmlPullParserFactory 的实例, 并借助这个实例得到 XmlPullParser 对象;
2)调用 XmlPullParser 的 setInput() 方法将服务器返回的XML 数据设置进去;
3)通过 getEventType() 方法可以得到当前的解析事件,可以使用循环来进行解析,如果当前的解析事件不等于 XmlPullParser.END_DOCUMENT,说明解析工作还没完成,调用 next() 方法后可以获取下一个解析事件。
示例代码:
private void parseXmlWithPull(String xml){
try{
XmlPullParserFactory factory = XmlPullParserFactory.newInstance();
XmlPullParser parser = factory.newPullParser();
parser.setInput(new StringReader(xml));
//获取节点类型
int eventType = parser.getEventType();
while(eventType != XmlPullParser.END_DOCUMENT){
// 获取当前解析节点名
String nodeName = parser.getName();
switch(eventType){
// 开始解析某个结点
case XmlPullParser.START_TAG:
break;
// 完成解析某个结点
case XmlPullParser.END_TAG:
break;
default:
break;
}
parser.next();
}
}catch (Exception e){
e.printStackTrace();
}
}
2、SAX解析方式:
1)新建一个类继承自 DefaultHandler;
2)重写如下 5 个方法:
--startDocument(): 在开始XML 解析的时候调用;
--startElement(): 在开始解析某个结点的时候调用;
--characters(): 在获取结点中内容的时候调用;
--endElement(): 在完成解析某个结点的时候调用;
--endDocument():完成整个XML 解析的时候调用。
public class ContentHandler extends DefaultHandler {
@Override
public void startDocument() throws SAXException {
super.startDocument();
}
/**方法里面参数为被解析节点的信息,如localName表示节点名*/
@Override
public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException {
super.startElement(uri, localName, qName, attributes);
}
@Override
public void characters(char[] ch, int start, int length) throws SAXException {
super.characters(ch, start, length);
}
@Override
public void endElement(String uri, String localName, String qName) throws SAXException {
super.endElement(uri, localName, qName);
}
@Override
public void endDocument() throws SAXException {
super.endDocument();
}
}
3)创建 SAXParserFactory 实例 :SAXParserFactory factory = SAXParserFactory.newInstance();
4)创建 XMLReader 对象:XMLReader xmlReader = factory.newSAXParser().getXMLReader();
5)新建自定义的 ContentHandler 对象;
6)将ContentHandler的实例设置到 XMLReader 中;
7)调用 XMLReader 的 parse() 方法开始解析:xmlReader.parse(new InputSource(new StringReader(xmlData)));
代码示例:
private void parseXmlWithSAX(String xml){
try{
SAXParserFactory factory = SAXParserFactory.newInstance();
SAXParser parser = factory.newSAXParser();
XMLReader reader = parser.getXMLReader();
ContentHandler handler = new ContentHandler();
reader.setContentHandler(handler);
reader.parse( new InputSource( new StringReader(xml) ) );
}catch (Exception e){
e.printStackTrace();
}
}
二、Json解析:
1、使用 JSONObject 解析:
private void parseJsonWithJSONObject(String json){
try{
JSONArray jsonArray = new JSONArray(json);
for(int i = 0; i < jsonArray.length(); i++){
JSONObject jsonObject = jsonArray.getJSONObject(i);
String data = jsonObject.getString("data");
......;
}
}catch (Exception e){
e.printStackTrace();
}
}
2、使用 GSON 解析:GSON 解析 Json更为简单
1)使用 GSON 前需要导入 jar 包:gson-2.2.4.jar
2)GSON 可以将一段JSON 格式的字符串自动映射成一个对象,从而不需要手动解析;
private void parseJSONWithGSON(String jsonData) {
Gson gson = new Gson();
List<Object> data = gson.fromJson(jsonData, new
TypeToken<List<Object>>() {}.getType());
for (Object obj : data) {
......;
}
}
3)若解析的不是一个 JSON 数组,则可以直接写成:ObjectType type = gson.fromJson(jsonData, ObjectType.class);
Android--数据解析的更多相关文章
- Android数据解析-JSON解析
JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式,基于JavaScript(Standard ECMA-262 3rd Edition - December ...
- Android数据解析——JSON
示例一: 有这样一个JSON需要解析,比如: {"thresholds": {"1e-3": 65.3,"1e-5": 76.5," ...
- android基础(五)网络数据解析方法
在网络上传输数据时最常用的方法有两种:XML和JSON,下面就对这两种类型的数据解析进行讲解. 一.XML数据解析 在Android中,常见的XML解析器分别为SAX解析器.DOM解析器和PULL解析 ...
- Android系列---JSON数据解析
您可以通过点击 右下角 的按钮 来对文章内容作出评价, 也可以通过左下方的 关注按钮 来关注我的博客的最新动态. 如果文章内容对您有帮助, 不要忘记点击右下角的 推荐按钮 来支持一下哦 如果您对文章内 ...
- Android网络之数据解析----使用Google Gson解析Json数据
[声明] 欢迎转载,但请保留文章原始出处→_→ 生命壹号:http://www.cnblogs.com/smyhvae/ 文章来源:http://www.cnblogs.com/smyhvae/p/4 ...
- Android网络之数据解析----SAX方式解析XML数据
[声明] 欢迎转载,但请保留文章原始出处→_→ 生命壹号:http://www.cnblogs.com/smyhvae/ 文章来源:http://www.cnblogs.com/smyhvae/p/ ...
- Android学习笔记之JSON数据解析
转载:Android学习笔记44:JSON数据解析 JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,采用完全独立于语言的文本格式,为Web应用开发提供了一种 ...
- 实现android上解析Json格式数据功能
实现android上解析Json格式数据功能,该源码转载于安卓教程网的,http://android.662p.com ,个人感觉还不错的,大家可以看看一下吧. package com.practic ...
- Android JSON数据解析(数据传输)
上篇随笔详细介绍了三种解析服务器端传过来的xml数据格式,而对于服务器端来说,返回给客户端的数据格式一般分为html.xml和json这三 种格式,那么本篇随笔将讲解一下json这个知识点,包括如何通 ...
- Android Multimedia框架总结(八)Stagefright框架之AwesomePlayer及数据解析器
转载请把头部出处链接和尾部二维码一起转载,本文出自逆流的鱼:http://blog.csdn.net/hejjunlin/article/details/52503057 前言:前面一篇分析了medi ...
随机推荐
- DataRead 和DataSet区别
dataset表示一个数据集,是数据在内存中的缓存. 可以包括多个表DatSet 连接数据库时是非面向连接的.把表全部读到Sql中的缓冲池,并断开于数据库的连接 datareader 连接数据库时是面 ...
- iOS强制横屏
由于项目需求,需要整个项目页面都是竖屏,唯独一个折线图页面强制性横屏显示. 网上逛了许多帖子,也看了好多大神的提供的方法,都没能够实现本屌丝想要的效果.没办法自己研究自己搞,借鉴各路大神的思路,最后费 ...
- Python:进程
由于GIL的存在,python一个进程同时只能执行一个线程.因此在python开发时,计算密集型的程序常用多进程,IO密集型的使用多线程 1.多进程创建: #创建方法1:将要执行的方法作为参数传给Pr ...
- sql 将查询结果为多行一列合并为一行一列
使用sql stuff函数 /* stuff(param1, startIndex, length, param2)说明:将param1中自startIndex(SQL中都是从1开始, ...
- apktool+dex2jar+xjad反编译android程序
1 将MyAdroid.apk拷贝到E:\disapk 2 下载apktool1.5.2.tar.bz2 和 apktool-install-windows-r05-ibot.tar.bz2 并解压到 ...
- MVC中获取模型属性的Range和StringLength验证特性设置
MVC中的客户端及服务端模型验证信息都以ModelMetadata类型作为承载,在获得属性的ModelMetadata之后(还不知道怎么获取ModelMetadata的童鞋请自行恶补),我们可以轻松得 ...
- NC nc5.x笔记(编辑中)
一.设置卡片界面下 金额字段负数为红色! /** * 设置卡片界面下 金额字段负数为红色! */ private void repaintBodyMoneyColor(){ if(!isListPan ...
- 几个开源XMPP Android客户端简单比较
想做个基于xmpp的即时通讯工具,服务端已经基本成型了.当然需要客户端需要配合,PC端基于spark进行改造,手机端先从Android入手(IOS估计一个人是搞不过来了). 原本Android开发 ...
- Linux基本权限学习
概念 权限就是用户对资源所能进行的操作 -- 这里涉及到三个重要的概念:用户.资源.操作. 首先,Linux中用户分为:u.g.o,就是用户.用户组.其他用户.--这里的用户是指拥有者!!!务必记住! ...
- C++链接两个cpp 文件
我们在编程中,有没有想过,分别写代码,然后把两个cpp,文件合并,两个自身本不能运行的文件,在一起却可以运行(主要牵扯函数调用,一个有声明和调用,另一个定义).那么具体如何实现呢? 跟着我的步骤: 1 ...