数据解析

XML数据格式解析

pull解析方式

  调用方法解析:
 private void parseXMLWithPull(String xmlData) {
        try {
            XmlPullParserFactory factory = XmlPullParserFactory.newInstance();
            XmlPullParser xmlPullParser = factory.newPullParser();
            xmlPullParser.setInput(new StringReader(xmlData));
            int eventType = xmlPullParser.getEventType();
            String id = "";
            String name = "";
            String version = "";
            while (eventType != XmlPullParser.END_DOCUMENT) {
                String nodeName = xmlPullParser.getName();
                switch (eventType) {
                    // 开始解析某个结点
                    case XmlPullParser.START_TAG: {
                        if ("id".equals(nodeName)) {
                            id = xmlPullParser.nextText();
                        } else if ("name".equals(nodeName)) {
                            name = xmlPullParser.nextText();
                        } else if ("version".equals(nodeName)) {
                            version = xmlPullParser.nextText();
                        }
                        break;
                    }
                    // 完成解析某个结点
                    case XmlPullParser.END_TAG: {
                        if ("app".equals(nodeName)) {
                            Log.d("MainActivity", "id is " + id);
                            Log.d("MainActivity", "name is " + name);
                            Log.d("MainActivity", "version is " + version);
                        }
                        break;
                    }
                    default:
                        break;
                }
                eventType = xmlPullParser.next();
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

sax解析方式

private void parseXMLWithSAX(String xmlData) {
      try {
          SAXParserFactory factory = SAXParserFactory.newInstance();
          XMLReader xmlReader = factory.newSAXParser().getXMLReader();
          ContentHandler handler = new ContentHandler();
          // 将ContentHandler的实例设置到XMLReader中
          xmlReader.setContentHandler(handler);
          // 开始执行解析
          xmlReader.parse(new InputSource(new StringReader(xmlData)));
      } catch (Exception e) {
          e.printStackTrace();
      }
  }
    一般要创建一个类继承DefaultHandler并重写那5个方法,还要创建一个content类,这里代码比较复杂,就不贴了,后面给出项目地址。

JSON 数据格式解析

#JSONObject
private void parseJSONWithJSONObject(String jsonData) {
      try {
          JSONArray jsonArray = new JSONArray(jsonData);
          for (int i = 0; i < jsonArray.length(); i++) {
              JSONObject jsonObject = jsonArray.getJSONObject(i);
              String id = jsonObject.getString("id");
              String name = jsonObject.getString("name");
              String version = jsonObject.getString("version");
              Log.d("MainActivity", "id is " + id);
              Log.d("MainActivity", "name is " + name);
              Log.d("MainActivity", "version is " + version);
          }
      } catch (Exception e) {
          e.printStackTrace();
      }
  }
#Gson
private void parseJSONWithGSON(String jsonData) {
        Gson gson = new Gson();
        List appList = gson.fromJson(jsonData, new TypeToken>() {}.getType());
        for (App app : appList) {
            Log.d("MainActivity", "id is " + app.getId());
            Log.d("MainActivity", "name is " + app.getName());
            Log.d("MainActivity", "version is " + app.getVersion());
        }
    }

解析代码很简单,但是还要有APP类,这个类可以自动生成的:

package com.example.networktest;

public class App {

    private String id;

    private String name;

    private String version;

    public String getId() {
        return id;
    }

    public void setId(String id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getVersion() {
        return version;
    }

    public void setVersion(String version) {
        this.version = version;
    }

}

你可能感兴趣的:(数据解析)