2020-11-2(安卓入门(每个字皆为手打))

jdk1.5之后加入的三个api
预置注解三个
Deprecated 当前方法是过时的,在api中有更好的实现
Supresswarning 压制警告
Override 当前方法是覆盖了父类方法

xml
文档的声明:

<?xml version="1.0" encoding="utf-8"?>必须在文档的第一行进行声明(encoding后视情况而定)

元素:起始标签 闭合标签
标签必须闭合
如果标签中没有其它内容可以自闭和
标签嵌套的时候需要注意,先开始的标签后闭合,后开始的标签先闭合
根标签必须有只能有一个
2.注意:xml中不会忽略主题内容中的出现的空格和换行(浪费流量,尽量去掉)
3.一个xml元素可以包含字母,数字以及其它一些可见字符,但必须遵守以下规范

a.区分大小写,例如是两个不同的标记
b.不能以数字或“_”下划线开头
c.不能以xml(或XML,或Xml等保留字)开头
d.不能包含空格
e.名称中间不能包含冒号(:)

属性
a.属性得写在开始标签
b.属性的命名规则跟元素命名规则一样
c.属性一定要用引号包起来,单引号双引号都可以
d属性的内容可以用字标签来表示

注释

a.xml声明之前不能有注释
b注释不能嵌套
<–!一大段注释
……
<–!有一段注释–>
……
–>

CDATA区
通过CDATA区传递的内容不会被解析器解析

<![CDATA[ liu <<<<<>>>>>]]>

特殊字符(对于一些特殊字符,若要在主体元素中显示,必须进行转义)
2020-11-2(安卓入门(每个字皆为手打))

xml约束
格式良好的xml:遵循xml语法的xml
有效的xml:遵循 约束文档的xml
(格式良好不一定有效,有效的一定格式良好)
作用:
约束文档定义了xml中允许出现的元素名称,属性及元素出现的顺序
约束技术:
1.xml DTD
dtd可以写在单独的文件中,扩展名是dtd,且必须使用uft-8编码
可以声明在xml文件中
通过dtd可以约束元素的名称 元素出现的顺序 出现的次数 属性的名称 属性的类型 属性是否必须出现 属性得值是否可以重复

2.xml Schema
a.扩展名.xsd本身是一份xml文档
b.对名称空间(namespace)支持的很好
c.支持的类型比dtd更丰富约束得更加的细致,可以支持自定义的类型
d.schema正在逐步替换dtd,在Android中清单文件和布局文件 用到了schema技术

3.XDR

4.SOX

解析xml文档
Dom解析
加载整个文档,树状结构,Document对象,可以修改文档
获取工程->获取解析器
2020-11-2(安卓入门(每个字皆为手打))

a.把整个文档加载到内存中——>Document 所以可以对文档进行修改
b.如果文件比较大,可能会导致内存溢出
编程思路:
DocumentBuilderFactory—>DocumentBuilder–>Document—>通过节点获得NodeList–>具体的Node
如果想修改
TransformerFactory–>Transformer–>Transform(source,result)
直接修改内存里面的值是毫无作用的,需要借助StreamResult流
2020-11-2(安卓入门(每个字皆为手打))

Sax解析
获取工程->获取解析器
一个元素一个元素解析,函数自动会被调用(不能停下来)
xmlreader 设置一个处理器ContentHandler(sax解析自动调用里面函数startDocument endDocument startElement endElement character)然后xmlreader.parse();
2020-11-2(安卓入门(每个字皆为手打))

a.边读边解析
b.当使用sax方法读到特定的标签时候,自动调用相应的方法进行操作
2020-11-2(安卓入门(每个字皆为手打))

优点:
不会造成内存溢出
缺点:
不能修改xml文件

Pull解析
2020-11-2(安卓入门(每个字皆为手打))

(安卓里面做不需要导包,但在java里面搞需要导入相应的jar包)
拿到解析器后,setinput(事件类型的常量XMLPullParse.END_TAG START_TAG START_DOCUMENT END_DOCUMENT TEXT )
一个元素一个元素解析,需要手动调用next函数,让它往下执行(可以停下来)
a.获取工厂
b.获取解析器
c.设置输入源
d.获取事件类型 int event Type=getEvenType()
parse.next(); —>解析下一个元素,并且返回事件类型
while(event Type!=END_DOCUMENT){
switch(eventType){
getName()----->获取元素的名字

}
eventType=parse.next();
}

json (对于纯移动端项目)
可以用于传递数据 保存数据 优势节省流量
2020-11-2(安卓入门(每个字皆为手打))
JSONObject{‘key’:value} valued的类型: int long double boolean NULL JSONObject JSONArray
JSONArray[{ },{ }]