今日内容
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);