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 ...
随机推荐
- JAVA 之print,printf,println
print:将它的参数显示在命令窗口,并将输出光标定位在所显示的最后一个字符之后. println: 将它的参数显示在命令窗口,并在结尾加上换行符,将输出光标定位在下一行的开始. printf:是格式 ...
- Jquery当中当data为json串时,eval('(' +data+ ')')的解释
var dataObj = eval('(' +data+ ')') data是返回来的json. dataObj就是json对象了. 为什么要添加 '(' 与 ')' 作为开始于结尾呢? json是 ...
- 编辑器Ultraedit快捷键
编辑器Ultraedit快捷键说到编辑器的快捷键,VIM是无与伦比的.要反对,也得是带脚踏板的EmaCS.UE还是有差距的,很大差距.注意:VIM是开源.免费的,而UE则需要注册.UE是Windows ...
- Velocity语言的介绍
Velocity语言的介绍 2016-09-06 15:39:25 语言介绍 Velocity是一种Java模版引擎技术,是一个基于Java的模板引擎(template engine).她允许任何人简 ...
- My安卓知识3--多个activity之前共享数据的方法
在网上搜这个问题的时候看到了有一篇文章说有五种方法: 1.基于消息的通信机制 Intent ---boudle ,extra 数据类型有限,比如遇到不可序列化的数据Bitmap,InputStrea ...
- 沉浸式状态栏_boolean hasTopLine = a.getBoolean(1, false);//AS会在"1"下显示错误红线
TypedArray a = mContext.obtainStyledAttributes(attrs); boolean hasBottomLine = a.getBoolean(0, false ...
- jetbrains产品激活方式(WebStorm,Pycharm有效)
注册时,在打开的License Activation窗口中选择"activation code",在输入框输入下面的注册码 43B4A73YYJ-eyJsaWNlbnNlSWQiO ...
- 122. Best Time to Buy and Sell Stock(二) leetcode解题笔记
122. Best Time to Buy and Sell Stock II Say you have an array for which the ith element is the price ...
- 建站阿里云、amh主机面版
阿里云 Nginx+tomcat7+Mencached负载均衡集群配置 http://blog.csdn.net/zht666/article/details/38515147 apache2.2.1 ...
- 三道关于Taylor级数的题目,证明你爹是你爹
=============幂级数的唯一性==================