安卓小菜鸟重拾Java系列001.基本数据类型与引用数据类型 与dom解析xml

来源:互联网 发布:数据转换器 编辑:程序博客网 时间:2024/05/25 01:35
    自己的Java基础太差了,学了差不多两年,到3.6号突然顿悟了 构造方法的用法,可见自己的愚钝与贪玩,现在Andorid行情也不是很好,压力很大呀,自己也是那么的菜,那么,重新开始学一遍把,话不多说开始了。栈与堆都是Java用来在Ram中存放数据的地方。与C++不同,Java自动管理栈和堆,程序员不能直接地设置栈或堆。

Java的堆是一个运行时数据区,类的(对象从中分配空间。这些对象通过new、newarray、anewarray和 multianewarray等指令建立,它们不需要程序代码来显式的释放。堆是由垃圾回收来负责的,堆的优势是可以动态地分配内存大小,生存期也不必事先告诉编译器,因为它是在运行时动态分配内存的,Java的垃圾收集器会自动收走这些不再使用的数据。但缺点是,由于要在运行时动态分配内存,存取速度较慢。
栈的优势是,存取速度比堆要快,仅次于寄存器,栈数据可以共享。但缺点是,存在栈中的数据大小与生存期必须是确定的,缺乏灵活性。栈中主要存放一些基本类型的变量(,int, short, long, byte, float, double, boolean, char)和对象句柄。
我们先看一张图!!
这里写图片描述

下面我们用Android Studio工具用dom方式解析 xml
一.先在java\ Main目录下创建一个assets文件。里面创建一个xml格式的文件
二.编写xml数据

部分xml数据

xml数据

<?xml version="1.0" encoding="UTF-8"?><gen>    <layer>        <type>类型</type>        <size>占用空间</size>        <value>取值范围</value>    </layer>    <layer>        <type>byte(字节型)</type>        <size>1字节</size>        <value>—128~127</value>    </layer>    <layer>        <type>shrot(短整形)</type>        <size>2字节</size>        <value>-2^16~2^16-1</value>    </layer>    <layer>        <type>int(整形)</type>        <size>4字节</size>        <value>-2^31~23^`-1</value>    </layer>    <layer>        <type>long(长整型</type>        <size>8字节</size>        <value>-9223372036854775808~9223372036854775807</value>    </layer>    <layer>        <type>float(浮点型)</type>        <size>4字节</size>        <value>-3.4028235*10……38~3.405825*10……38-1</value>    </layer>    <layer>        <type>double(双精度)</type>        <size>8字节</size>        <size>-1.797696*10……308~1.79769313*10^308</size>    </layer>    <layer>        <type>char</type>        <size>1字节</size>        <value>0~65535</value>    </layer>    <layer>        <type>boolean(布尔型)</type>        <size>1或者4字节</size>        <value>false | true </value>    </layer></gen>

三.开始解析
1.先创建一个实体类和和xml里要解析的数据名字一致
public class BasicData {

    private String type;    private String size;    private String value;@Overridepublic String toString() {    return "BasicData{" +            "type='" + type + '\'' +            ", size='" + size + '\'' +            ", value='" + value + '\'' +            '}';}public String getType() {    return type;}public void setType(String type) {    this.type = type;}public String getSize() {    return size;}public void setSize(String size) {    this.size = size;}public String getValue() {    return value;}public void setValue(String value) {    this.value = value;}

}

2.创建一个解析dom的接口方便调用

public interface BookParser {    /**     * 解析输入流 得到Book对象集合     * @param is     * @return     * @throws Exception     */    public List<BasicData> parse(InputStream is) throws Exception;}

3.解析xml

public class domResolveXML  implements BookParser {    @Override    public List<BasicData> parse(InputStream is) throws Exception {        List<BasicData> books = new ArrayList<BasicData>();        DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();  //取得DocumentBuilderFactory实例        DocumentBuilder builder = factory.newDocumentBuilder(); //从factory获取DocumentBuilder实例        Document doc = builder.parse(is);   //解析输入流 得到Document实例        Element rootElement = doc.getDocumentElement();        NodeList items = rootElement.getElementsByTagName("layer");        for (int i = 0; i < items.getLength(); i++) {            BasicData book = new BasicData();            Node item = items.item(i);            NodeList properties = item.getChildNodes();            for (int j = 0; j < properties.getLength(); j++) {                Node property = properties.item(j);                String nodeName = property.getNodeName();                if (nodeName.equals("type")) {                    book.setType(property.getFirstChild().getNodeValue());                } else if (nodeName.equals("size")) {                    book.setSize(property.getFirstChild().getNodeValue());                } else if (nodeName.equals("value")) {                    book.setValue(property.getFirstChild().getNodeValue());                }            }            books.add(book);        }        return books;    }   }

4.在Activity中打印输出

public class MainActivity extends AppCompatActivity {    private BookParser parser;    private List<BasicData> basicDatas;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        getData();    }    /**     * 获得xml数据     */    public  void  getData(){        try {            basicDatas = new ArrayList<>();            // 通过assertmanager的open方法获取到beauties.xml文件的输入流//            InputStream is = this.getClass().getClassLoader().getResourceAsStream("basic_data.xml");            InputStream is = getAssets().open("basic_data.xml");            // 初始化自定义的实现类BeautyParserImpl            parser = new domResolveXML();  //创建SaxBookParser实例            basicDatas = parser.parse(is);  //解析输入流            for (BasicData book : basicDatas) {                Log.i("MAin", book.toString());            }        } catch (Exception e) {            e.printStackTrace();        }    }

我们放出一张解析完之后的图,看看到底解析成功没有
这里写图片描述

我们做成表格的形式来展示数据更美观,用到Listview
下面放出效果图:

这里写图片描述

0 0
原创粉丝点击