今日内容

xml json->开发环境->数据存储->mysql->sqlite

XML: 用来传输和存储数据。
JSON:用来传输和存储数据。
JSON 比 XML 更小、更快,更易解析。

搭建JavaEE环境-创建Java工程

常用快捷键:
    alt+/           代码提示
    alt+↑/↓         代码移动
    ctrl+alt+↑/↓    代码复制

    ctrl+/          代码注释
    ctrl+1          快速修复/万能键
    ctrl+d          删除当前行
    ctrl+shift+f    格式化代码
    ctrl+o          显示大纲
    ctrl+t          查看类结构
    ctrl+shift+X    变大写
    ctrl+shift+Y    变小写

Junit单元测试

单元测试:单元测试是开发者编写的一小段代码,用于检验代码或功能是否正确 在java里面一个方法就是一个单元
添加Junit测试
    1.右键项目->build path->Configure Build path...->Libraries选项卡->add Libraries->Junit->选择相应的版本->Finish
    2.在方法的上面添加一个注解 @Test
断言
Assert.assertEquals(expected, actual);
expected:期望
actual :实际

回顾注解

[1]不是注释  
[2]把注解当成一种标记:比如。班级名称就是一个标记。班级里面的学生都带有这个村记 
[3]标记可能是一个提示描述,也可能是一个功能描述 等等描述 

JDK1.5 提供的注解
[3] @Deprecated          过时的
[4] @SuppressWarnings("")    压制
[5] @Override            重写

XML简介

[1]什么是XMl
    XML 指[可扩展][标记语言](EXtensible Markup Language)
    XML 是一种标记语言,很类似 [HTML]
    XML 的设计宗旨是传输数据,而非显示数据
    XML 标签没有被预定义。您需要自行定义标签。
    XML 被设计为具有自我描述性。
    XML 是 W3C 的推荐标准  

[2]为什么要用XMl
    XML 可扩展标记语言 
    XML 被设计用来传输和存储数据
    XML (重要)可以用来做配置文件

XML的声明

[1]定义一个xml文件,格式是固定的
[2]如何验证一个xml文件是否正确呢,直接浏览器查看就可以了
[3]xml的编码

XML的语法

[1]所有 XML 元素都须有关闭标签
[2]XML 标签对大小写敏感
[3]XML 必须正确地嵌套
[4]XML 文档必须有根元素
[5]XML 的属性值须加引号
[6]XML 中,一些字符拥有特殊的意义.需要转义。比如 < 等于 <
[7]XML 中的注释\
[8]在 XML 中,空格会被保留
[9]CDATA区  所有 XML 文档中的文本均会被解析器解析。只有 CDATA 区段(CDATA section)中的文本会被解析器忽略。
    <![CDATA[
        ...
    ]]>

XML中元素的概念

[1]XML 元素指的是从(且包括)开始标签直到(且包括)结束标签的部分。
[2]元素可包含其他元素、文本或者两者的混合物。元素也可以拥有属性
[3]命名规则
    [3.1]名称可以含字母、数字以及其他的字符 
    [3.2]名称不能以数字或者标点符号开始 
    [3.3]名称不能以字符 “xml”(或者 XML、Xml)开始 
    [3.4]名称不能包含空格

xml中三种解析方式介绍

[1]dom解析 Document Object Model 官方推荐的标准
    原理:把xml文件加载到内存当中,在内存中形成一个树形结构
    优点:可以进行增删改查
    缺点:容易内存泄漏
[2]sax解析 Simple Api For Xml 不是官方推荐的标准 是从一个程序员社区研究出来的
    原理:一边解析 一边处理 一边释放内存 实际上就是一行一行的读
    优点:不会内存泄漏
    缺点:不能够对数据进行增删改
    API Application programming Interface应用程序接口
[3]xmlPull解析 Android中内置的解析器 这个必须会
    原理:类似sax
[4]3种解析方法 只有思想 并没有提供相应的api实现
    sun公司提供了一套接口Jaxp Java API For Xml processing 实现dom和sax解析

dom解析

dom解析会把xml元素 属性 文本 都当成节点


[1]javax.xml.parsers 
[2]DocumentBuilder 使其从 XML 文档获取 DOM 文档实例。使用此类,应用程序员可以从 XML 获取一个 Document
[3]DocumentBuilderFactory  使应用程序能够从 XML 文档获取生成 DOM 对象树的解析器
[4]Document XML 文档

步骤:
    [1]获取DocumentBuilderFactory 解析器工厂
    [2]获取DocumentBuilder 解析器
    [3]解析xml文件 获取Document 整个文档对象
    [4]获取xml里面的内容
    [5]获取节点里面每次个节点对象

代码:

    // [1]获取DocumentBuilderFactory 解析器工厂
    DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
    // [2]获取DocumentBuilder 解析器
    DocumentBuilder builder = factory.newDocumentBuilder();
    // [3]解析xml文件 获取Document 整个文档对象
    Document document = builder.parse("books.xml");

    // [4]获取xml里面的内容
    NodeList nodeList = document.getElementsByTagName("title");

    for (int i = 0; i < nodeList.getLength(); i++) {
        // [5]获取节点里面每次个节点对象
        Node node =  nodeList.item(i);
        System.out.println(node.getTextContent()+node.getNodeType()+node.getNodeName());


    }

sax解析

步骤:
    [1]获取一个 SAXParserFactory 解析器工厂
    [2] 获取一个SAXParser 解析器
    [3]开始解析xml

代码:
    // [1]获取一个 SAXParserFactory 解析器工厂
    SAXParserFactory factory = SAXParserFactory.newInstance();
    // [2] 获取一个SAXParser 解析器
    SAXParser parser = factory.newSAXParser();

    // [3]开始解析xml
    parser.parse("books.xml", new DefaultHandler() {
        // 文档开始
        @Override
        public void startDocument() throws SAXException {
            super.startDocument();
            System.out.println("startDocument");
        }

        // 元素开始
        @Override
        public void startElement(String uri, String localName, String qName, Attributes attributes)
                throws SAXException {
            super.startElement(uri, localName, qName, attributes);
            System.out.println("startElement = " + qName);
        }

        // 文本内容
        @Override
        public void characters(char[] ch, int start, int length) throws SAXException {
            super.characters(ch, start, length);
            System.out.println("characters = " + new String(ch, start, length));
        }

        // 元素结束
        @Override
        public void endElement(String uri, String localName, String qName) throws SAXException {
            super.endElement(uri, localName, qName);
            System.out.println("endElement");
        }

        // 文档结束
        @Override
        public void endDocument() throws SAXException {
            super.endDocument();
            System.out.println("endDocument");
        }
    });

xmlpull解析把数据封装到javaBean中

xmlPull解析 Android中内置的解析器 这个必须会

原理:类似sax    
与sax区别:sax强制解析所有,xmlPull解析可控,想解析哪个哪里就解析哪里

事件类型:
  public static final int START_DOCUMENT = 0;
  public static final int END_DOCUMENT = 1;
  public static final int START_TAG = 2;
  public static final int END_TAG = 3;
  public static final int TEXT = 4;

步骤
    [1]获取一个 XmlPullParserFactory 解析工厂
    [2]获取一个 XmlPullParser
    [3]读取xml文档
    [4]获取事件类型
    5]解析器向下移动

代码:

    // [1]获取一个 XmlPullParserFactory 解析工厂
    XmlPullParserFactory factory = XmlPullParserFactory.newInstance();
    // [2]获取一个 XmlPullParser
    XmlPullParser parser = factory.newPullParser();

    // [3]读取xml文档
    parser.setInput(new FileInputStream("books.xml"), "utf-8");

    // [4]获取事件类型
    int eventType = parser.getEventType();
    System.out.println(eventType);
    // [5]解析器向下移动
    eventType = parser.next();
    System.out.println(eventType);
    eventType = parser.next();
    System.out.println(eventType);
    eventType = parser.next();
    System.out.println(eventType);

解析数据:
while (eventType != XmlPullParser.END_DOCUMENT) {
        switch (eventType) {
        case XmlPullParser.START_TAG:
            if (parser.getName().equals("book")) {
                book = new Book();
                String id = parser.getAttributeValue(0);
                book.setId(id);
            }  else if (parser.getName().equals("title")) {
                book.setTitle(parser.nextText());

            } else if (parser.getName().equals("price")) {
                book.setPrice(parser.nextText());
            }
            break;
        case XmlPullParser.END_TAG:
            if (parser.getName().equals("book")) {
                books.add(book);
            }
            break;
        }
        eventType = parser.next();
}

json介绍

简介:
    [1]JSON:JavaScript 对象表示法(JavaScript Object Notation)。
    [2]JSON 是存储和交换文本信息的语法。类似 XML。
    [3]JSON 比 XML 更小、更快,更易解析。
    [4]JSON 是轻量级的文本数据交换格式 
    [5]JSON 独立于语言 * 
    [6]JSON 具有自我描述性,更易理解 

    {
        "name":"张三"
    }
语法:
    [1]数据在名称和键值对中 
        名称和键值对在双引号中,名称后面写一个冒号,然后是值:
        {"name" : "张三"}
        等价于
        name = "张三"
    [2]数据由逗号分隔 
    [3]花括号保存对象 
        { "name":"张三" , "age":"18" }
        等价
        name = "张三"
        age = "18"
    [4]方括号保存数组 
        {
            "person": [
                { "name":"张三" , "age":"18" },
                { "name":"王五" , "age":"19" },
                { "name":"李四" , "age":"20" }
            ]
        }

json解析的实现

json解析 android内置
JSONObject =解析对象
JSONArray  =解析数组
代码:
    String json = "{'person': [{ 'name':'张三'  },{ 'name':'王五'  },{ 'name':'李四'  }]}";
    JSONObject object = new JSONObject(json);
    JSONArray person = (JSONArray) object.get("person");
    JSONObject i = (JSONObject) person.get(0);
    String name = (String) i.get("name");
    System.out.println(name);
    i = (JSONObject) person.get(1);
    name = (String) i.get("name");
    System.out.println(name);
    i = (JSONObject) person.get(2);
    name = (String) i.get("name");
    System.out.println(name);