文档章节

安卓学习-XML,JSON解析;SAX,DOM,PULL机制–SAX和PULL类似

少年不知愁滋味
 少年不知愁滋味
发布于 2016/04/02 21:19
字数 1098
阅读 31
收藏 0

一.XML解析

image

image

image

image

 

案例:image 点击按钮控制台打印

image

person.xml

<shanghaibaolei>
    <person personid="1">
        <name>xfei</name>
        <age>20</age>
        <sex>男</sex>
        <tel>13760359165</tel>
    </person>
    <person personid="2">
        <name>xxx</name>
        <age>18</age>
        <sex>女</sex>
        <tel>12345678901</tel>
    </person>
</shanghaibaolei>

Person.java

package com.example.administrator.xmlandjson;

/**
 * Created by Administrator on 2016/4/2.
 */
public class Person {
    int personid;
    String name;
    int age;
    String sex;
    String tel;

    @Override
    public String toString() {
        return "Person{" +
                "age=" + age +
                ", personid=" + personid +
                ", name='" + name + '\'' +
                ", sex='" + sex + '\'' +
                ", tel='" + tel + '\'' +
                '}';
    }
}

activity_main.xml

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context="com.example.administrator.xmlandjson.MainActivity">


    <Button
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="XML PULL解析"
        android:id="@+id/button"
        android:onClick="pullParserClick"
        android:layout_alignParentTop="true"
        android:layout_alignParentLeft="true"
        android:layout_alignParentStart="true" />
</RelativeLayout>

ManActivity.java

package com.example.administrator.xmlandjson;

import android.os.Bundle;
import android.support.v7.app.ActionBarActivity;
import android.util.Xml;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;

import org.xmlpull.v1.XmlPullParser;
import org.xmlpull.v1.XmlPullParserException;

import java.io.IOException;
import java.io.InputStream;
import java.io.StringReader;
import java.util.ArrayList;

public class MainActivity extends ActionBarActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }

    //使用Pull解析XML文件
    public void pullParserClick(View view) {
        ArrayList<Person> list= parser();
        for (int i=0;i<list.size();i++)
        {
            System.out.println(list.get(i));
        }
    }

    private ArrayList<Person> parser() {

        ArrayList<Person> list = new ArrayList<Person>();
        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();
            }
        } catch (XmlPullParserException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
        return list;
    }
}

 

二.JSON解析

image

image

image

image

image

image

image

点击第一个按钮:image

点击第二个按钮:image

 

点击第三个按钮image

点击第四个按钮:image

引用GSON包imagegoogle-gson-1.7.1-release.zip

Person.java

package com.example.administrator.json;

/**
 * Created by Administrator on 2016/4/2.
 */
public class Person {
    String firstName;
    String lastName;
    String email;

    @Override
    public String toString() {
        return "Person{" +
                "email='" + email + '\'' +
                ", firstName='" + firstName + '\'' +
                ", lastName='" + lastName + '\'' +
                '}';
    }
}

raw目录下{

image

person.json

{
  "user": [
    {
      "firstName": "xfei",
      "lastName": "xiaofei",
      "email": "1111@qq.com"
    },
    {
      "firstName": "HLY",
      "lastName": "huiliyi",
      "email": "xiaoguaishou@qq.com"
    }
  ]
}

person1.json

[
   {
     "firstName": "xfei",
     "lastName": "xiaofei",
     "email": "1111@qq.com"
   },
   {
     "firstName": "HLY",
     "lastName": "huiliyi",
     "email": "xiaoguaishou@qq.com"
   }
 ]

}

activity_main.xml

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context="com.example.administrator.json.MainActivity">


    <Button
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="JsonReader解析JSON"
        android:onClick="jsonReaderClick"
        android:id="@+id/button"
        android:layout_alignParentTop="true"
        android:layout_alignParentLeft="true"
        android:layout_alignParentStart="true" />

    <Button
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="生成JSON数据"
        android:onClick="createJSONClick"
        android:id="@+id/button2"
        android:layout_below="@+id/button"
        android:layout_alignParentLeft="true"
        android:layout_alignParentStart="true" />

    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="GSON解析JSON"
        android:onClick="gsonParseJsonClick"
        android:id="@+id/button3"
        android:layout_below="@+id/button2"
        android:layout_alignParentLeft="true"
        android:layout_alignParentStart="true"
        android:layout_alignRight="@+id/button2"
        android:layout_alignEnd="@+id/button2" />

    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="GSON生成JSON"
        android:onClick="gsonToJsonClick"
        android:id="@+id/button4"
        android:layout_below="@+id/button3"
        android:layout_alignParentLeft="true"
        android:layout_alignParentStart="true"
        android:layout_alignRight="@+id/button3"
        android:layout_alignEnd="@+id/button3" />
</RelativeLayout>

MainActivity.java

package com.example.administrator.json;

import android.os.Bundle;
import android.support.v7.app.ActionBarActivity;
import android.util.JsonReader;
import android.view.View;

import com.google.gson.Gson;
import com.google.gson.reflect.TypeToken;

import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;

import java.io.IOException;
import java.io.InputStreamReader;
import java.io.Reader;
import java.lang.reflect.Type;
import java.util.ArrayList;

public class MainActivity extends ActionBarActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }

    public void jsonReaderClick(View view) {
        ArrayList<Person> list = jsonReader();
        for (int i = 0; i < list.size(); i++) {
            System.out.println(list.get(i));
        }
    }

    /*JsonReader解析JSON*/
    private ArrayList<Person> jsonReader() {
       /* String json="{" +
                "   \"phone\" : [\"12345678\", \"87654321\"]," +
                "   \"name\" : \"yuanzhifei89\"," +
                "   \"age\" : 100," +
                "   \"address\" : { \"country\" : \"china\", \"province\" : \"guangdong\" }," +
                "   \"married\" : false," +
                "}";*/
        ArrayList<Person> list = new ArrayList<Person>();
        // JsonReader jr=new JsonReader(new StringReader(json));
        Reader r = new InputStreamReader(getResources().openRawResource(R.raw.person));
        JsonReader jr = new JsonReader(r);

        try {
            jr.beginObject();//开始解析对象
            if (jr.hasNext()) {
                if ("user".equals(jr.nextName())) {
                    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();
                }
            }
            jr.endObject();

        } catch (IOException e) {
            e.printStackTrace();
        }
        return list;
    }

    //生成JSON数据
    public void createJSONClick(View view) {
        ArrayList<Person> list = new ArrayList<Person>();
        Person p1 = new Person();
        p1.firstName = "路明非";
        p1.lastName = "路鸣泽";
        p1.email = "xiaofeicai@qq.com";
        Person p2 = new Person();
        p2.firstName = "绘梨衣";
        p2.lastName = "诺诺";
        p2.email = "xiaoguaishou@qq.com";
        list.add(p1);
        list.add(p2);


        JSONObject json = new JSONObject();
        JSONArray array = new JSONArray();
        try {
            for (int i = 0; i < list.size(); i++) {
                Person p = list.get(i);
                JSONObject obj = new JSONObject();
                obj.put("firstName", p.firstName);
                obj.put("lastName", p.lastName);
                obj.put("email", p.email);
                array.put(obj);
            }
            json.put("person", array);
        } catch (JSONException e) {
            e.printStackTrace();
        }

        //测试
        System.out.println(json.toString());
    }

    //使用GSON解析JSON
    public void gsonParseJsonClick(View view) {
        Gson gson = new Gson();
        Reader r = new InputStreamReader(getResources().openRawResource(R.raw.person1));
        Type type = new TypeToken<ArrayList<Person>>() {
        }.getType();
        ArrayList<Person> list = gson.fromJson(r, type);
        for (int i = 0; i < list.size(); i++) {
            System.out.println(list.get(i));
        }
    }

    // class MyTypeToken extends TypeToken<ArrayList<Person>>{}
    //GSON生成JSON
    public void gsonToJsonClick(View view) {
        ArrayList<Person> list = new ArrayList<Person>();
        Person p1 = new Person();
        p1.firstName = "路明非";
        p1.lastName = "路鸣泽";
        p1.email = "xiaofeicai@qq.com";
        Person p2 = new Person();
        p2.firstName = "绘梨衣";
        p2.lastName = "诺诺";
        p2.email = "xiaoguaishou@qq.com";
        list.add(p1);
        list.add(p2);
        Type type = new TypeToken<ArrayList<Person>>() {
        }.getType();
        Gson gson = new Gson();
        String json = gson.toJson(list, type);
        System.out.println(json);

    }
}
 

© 著作权归作者所有

少年不知愁滋味
粉丝 1
博文 69
码字总数 69314
作品 0
深圳
私信 提问
Android 创建与解析XML(六)—— 比较与使用

前面介绍了四种创建、解析XML的方式: 0、 Android 创建与解析XML(一)—— 概述 1、 Android 创建与解析XML(二)—— Dom方式 2、 Android 创建与解析XML(三)—— Sax方式 3、 Android ...

长平狐
2013/01/06
1K
0
Android 创建与解析XML(一)—— 概述

Android 是最常用的智能手机平台,XML 是数据交换的标准媒介,Android 中可以使用标准的XML生成器、解析器、转换器 API,对 XML 进行解析和转换。 XML,相关有DOM、SAX、JDOM、DOM4J、Xerce...

长平狐
2013/01/06
170
0
android解析xml文档的各种方法

在Android平台上可以使用Simple API for XML(SAX) 、 Document Object Model(DOM)和Android附带的pull解析器解析XML文件。 下面是本例子要解析的XML文件: 文件名称:itcast.xml <?xml vers...

amigos_wu
2013/05/03
387
0
Android读写XML(上)

注明:本文转自http://www.moandroid.com. 原文地址: http://www.moandroid.com/?p=508 XML 经常用作 Internet 上的一种数据格式,其文件格式想必大家都比较清楚,在这里我结合Android平台,...

晨曦之光
2012/03/01
398
0
PULL解析XML和SAX解析的区别

如果在一个XML文档中我们只需要前面一部分数据,但是使用SAX方式或DOM方式会对整个文档进行解析,尽管XML文档中后面的大部分数据我们其实都不需要解析,因此这样实际上就浪费了处理资源。使用...

TedYin
2013/11/12
240
0

没有更多内容

加载失败,请刷新页面

加载更多

作为一个(IT)程序员!聊天没有话题?试试这十二种技巧

首先呢?我是一名程序员,经常性和同事没话题。 因为每天都会有自己的任务要做,程序员对于其他行业来说;是相对来说比较忙的。你会经常看到程序员在发呆、调试密密麻麻代码、红色报错发呆;...

小英子wep
今天
12
0
【SpringBoot】产生背景及简介

一、SpringBoot介绍 Spring Boot 是由 Pivotal 团队提供的全新框架,其设计目的是用来简化新 Spring 应用的初始搭建以及开发过程,该框架使用了特定的方式来进行配置,从而使开发人员不再需要...

zw965
今天
4
0
简述并发编程分为三个核心问题:分工、同步、互斥。

总的来说,并发编程可以总结为三个核心问题:分工、同步、互斥。 所谓分工指的是如何高效地拆解任务并分配给线程,而同步指的是线程之间如何协作,互斥则是保证同一时刻只允许一个线程访问共...

dust8080
今天
6
0
OSChina 周四乱弹 —— 当你简历注水但还是找到了工作

Osc乱弹歌单(2019)请戳(这里) 【今日歌曲】 @花间小酌 :#今日歌曲推荐# 分享成龙的单曲《男儿当自强》。 《男儿当自强》- 成龙 手机党少年们想听歌,请使劲儿戳(这里) @hxg2016 :刚在...

小小编辑
今天
3.3K
22
靠写代码赚钱的一些门路

作者 @mezod 译者 @josephchang10 如今,通过自己的代码去赚钱变得越来越简单,不过对很多人来说依然还是很难,因为他们不知道有哪些门路。 今天给大家分享一个精彩的 GitHub 库,这个库整理...

高级农民工
昨天
9
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部