XML是一种常见的存储数据方式,在Android平台中内部很多地方都使用了XML存储,如轻量级的SharedPreferences类的存储就是使用的XML文件。
XML解析主要有三种方式,SAX(Simple API for XML),DOM(Document Object Mode)和Android附带的PULL解析器解析XML文件。
优点 | 缺点 | |
---|---|---|
SAX | 读取为单向性的,不占内存空间,解析属性方便 | 套嵌多个分支,处理不方便 |
DOM | 将整个XML文件加载如内存中,方便读取任意节点 | 消耗内存 |
PULL | 解决了SAX与DOM的缺点问题 |
PULL解析
PULL解析器的运行方式与SAX解析器的运行相似,提供了类似的事件可以使用parser.next()可以进入下一个元素并触发响应事件。当元素开始解析时,调用parser.next()方法获取下一个Text类型的值。
//android提供xml得到xmlpull解析器
XmlPullParser parser = Xml.newPullParser();
//传入文件输入流及xml文件编码
parser.setinput(in,"UTF-8");
/**
pull读到xml后返回EventType
读取到xml的声明返回数字0 STAR_DOCUMENT;
读取到xml的结束返回数字1 END_DOCUMENT
读取到xml的开始标签返回数字2 STAR_TAG
读取到xml的结束标签返回数字3 END_TAG
读取到xml的文本返回数字4 TEXT
*/
int eventType =parser.getEventTypr[];//获取当前的eventType
while(eventType!=XmlPullParser.END_DOCUMENT){
switch(eventType){...}
eventType =parser.next();//获取下一个事件的类型
}
//使用PULL解析XML文件
public void pullParserClick(View view){
ArrayList list = parser();
for (int i =0;i parser(){
ArrayList list =new ArrayList<>();
Person p =null;
//创建一个PULL解析器
XmlPullParser pull = Xml.newPullParser();
// StringReader sr =new StringReader(xml);
InputStream in = getResources().openRawResource(R.raw.person);
try {
//设置要解析的文件流
pull.setInput(in,"UTF-8");
//获取当前的事件类型
int eventType = pull.getEventType();
while (eventType!=XmlPullParser.END_DOCUMENT){
switch (eventType){
case XmlPullParser.START_TAG:
String tag = pull.getName();
if ("person".equals(tag)){
p =new Person();
p.personid = Integer.parseInt(pull.getAttributeValue(null,"personid"));
}else if ("name".equals(tag)){
p.name = pull.nextText();
}else if ("age".equals(tag)){
p.age =Integer.parseInt(pull.nextText());
}else if ("sex".equals(tag)){
p.sex=pull.nextText();
}else if ("tel".equals(tag)){
p.tel= pull.nextText();
}
break;
case XmlPullParser.END_TAG:
if ("person".equals(pull.getName())){
list.add(p);
}
break;
}
//获取下一个事件类型
eventType = pull.next();
}
JSON是一种轻量级的数据交换格式。它基于 ECMAScript (欧洲计算机协会制定的js规范)的一个子集,采用完全独立于编程语言的文本格式来存储和表示数据。简洁和清晰的层次结构使得 JSON 成为理想的数据交换语言。 易于人阅读和编写,同时也易于机器解析和生成,并有效地提升网络传输效率。
JSON构建于两种结构:1.“名称/值”对的集合,2.值的有序列表(数组)。
JSON表示名称/值对的方式:
{"firstName":"MA","lastName":"VINCE","email":"[email protected]"}
表示数组:
{"user":[
{"firstName":"MA","lastName":"VINCE","email":"[email protected]"}
{"firstName":"M","lastName":"VINC","email":"[email protected]"}]
}
/**
* JsonReader解析JSON
* @param view
*/
public void jsonReaderClick(View view){
ArrayList list =jsonReader();
for (int i =0;i jsonReader(){
// String json ="{ \"user\":[{ \"firstName\":\"MA\",\"lastName\":\"WEIGE\",\"email\":\"[email protected]\"},{\"firstName\":\"ZHANG\",\"lastName\":\"AKE\",\"[email protected]\"}]";
ArrayList list =new ArrayList<>();
Reader r =new InputStreamReader(getResources().openRawResource(R.raw.person));
JsonReader jr =new JsonReader(r);
try {
jr.beginArray();//开始解析数组
while (jr.hasNext()){
Person p =new Person();
jr.beginObject();//开始解析对象
while (jr.hasNext()){
String name =jr.nextName();
if("firstName".equals(name)){
p.firstName =jr.nextString();
}else if ("lastName".equals(name)){
p.lastName =jr.nextString();
}else if ("email".equals(name)){
p.email =jr.nextString();
}
}
jr.endObject();//结束对象的解析
list.add(p);
}
jr.endArray();//数组解析完毕
} catch (IOException e) {
e.printStackTrace();
}
return list;
}
}
生成JSON
public void createJSONClick(View view){
ArrayList list =new ArrayList<>();
Person p1 =new Person();
p1.firstName="aa";
p1.lastName="vince";
p1.email="[email protected]";
Person p2 =new Person();
p2.firstName="bb";
p2.lastName="ake";
p2.email="[email protected]";
list.add(p1);
list.add(p2);
JSONObject json =new JSONObject();
JSONArray array =new JSONArray();
try {
for (int i=0;i
//使用GSON解析JSON
public void gsonParseJsonClick(View view){
Gson gson =new Gson();
Reader r =new InputStreamReader(getResources().openRawResource(R.raw.person));
Type type =new TypeToken>(){}.getType();
ArrayList list = gson.fromJson(r,type);
for (int i =0;i
//gson转换json
public void gsonToJsonClick(View view){
ArrayList list =new ArrayList<>();
Person p1 =new Person();
p1.firstName="aa";
p1.lastName="vince";
p1.email="[email protected]";
Person p2 =new Person();
p2.firstName="bb";
p2.lastName="ake";
p2.email="[email protected]";
list.add(p1);
list.add(p2);
Gson gson =new Gson();
Type type =new TypeToken>(){}.getType();
String json = gson.toJson(list,type);
System.out.println(json);
}