Android解析XML-详尽

Android XML文件读取解析三种方式 XML文件读取解析 阅读详情

Android解析XML

         在Android平台上可以使用Simple API for XML(SAX) 、 Document Object Model(DOM)和Android附带的pull解析器解析XML文件。

        下面是本例子要解析的XML文件:itcast.xml

复制代码
<?xml version="1.0" encoding="UTF-8"?>
<persons>
  <person id="23">
    <name>李明</name>
    <age>30</age>
  </person>
  <person id="20">
    <name>李向梅</name>
    <age>25</age>
  </person>
</persons>
复制代码

        例子定义了一个javabean用于存放上面解析出来的xml内容, 这个javabean为Person,代码:

复制代码
public class Person {

    private Integer id;
    private String name;
private Short age;

    public Integer getId() {
        return id;
    }

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

    public String getName() {
        return name;
    }

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

    public Short getAge() {
        return age;
    }

    public void setAge(Short age) {
        this.age = age;
    }
}
复制代码

 

1. SAX解析XML文件

        SAX是一个解析速度快并且占用内存少的xml解析器,非常适合用于Android等移动设备。 SAX解析XML文件采用的是事件驱动,也就是说,它并不需要解析完整个文档,在按内容顺序解析文档的过程中,SAX会判断当前读到的字符是否合法XML语法中的某部分,如果符合就会触发事件。所谓事件,其实就是一些回调(callback)方法,这些方法(事件)定义在ContentHandler接口。

 

复制代码
public static List<Person> readXML(InputStream inStream) {
   try {
            //创建解析器
            SAXParserFactory spf = SAXParserFactory.newInstance();
            SAXParser saxParser = spf.newSAXParser();
 
            //设置解析器的相关特性,true表示开启命名空间特性
            saxParser.setProperty("http://xml.org/sax/features/namespaces",true);
            XMLContentHandler handler = new XMLContentHandler();
            saxParser.parse(inStream, handler);
            inStream.close();

            return handler.getPersons();
   } catch (Exception e) {
            e.printStackTrace();
   }

  return null;
}

 
//SAX类:DefaultHandler,它实现了ContentHandler接口。在实现的时候,只需要继承该类,重载相应的方法即可。
public class XMLContentHandler extends DefaultHandler {

            private List<Person> persons = null;
            private Person currentPerson;
            private String tagName = null;//当前解析的元素标签

             public List<Person> getPersons() {
                        return persons;
            }
 
            //接收文档开始的通知。当遇到文档的开头的时候,调用这个方法,可以在其中做一些预处理的工作。
            @Override
            public void startDocument() throws SAXException {
                        persons = new ArrayList<Person>();
            }

             //接收元素开始的通知。当读到一个开始标签的时候,会触发这个方法。其中namespaceURI表示元素的命名空间;
            //localName表示元素的本地名称(不带前缀);qName表示元素的限定名(带前缀);atts 表示元素的属性集合
            @Override
            public void startElement(String namespaceURI, String localName, String qName, Attributes atts) throws SAXException {

                        if(localName.equals("person")){
                                    currentPerson = new Person();
                                    currentPerson.setId(Integer.parseInt(atts.getValue("id")));
                        }

                        this.tagName = localName;
            }
 
            //接收字符数据的通知。该方法用来处理在XML文件中读到的内容,第一个参数用于存放文件的内容,
            //后面两个参数是读到的字符串在这个数组中的起始位置和长度,使用new String(ch,start,length)就可以获取内容。
            @Override
            public void characters(char[] ch, int start, int length) throws SAXException {

                        if(tagName!=null){
                                    String data = new String(ch, start, length);
                                    if(tagName.equals("name")){
                                                this.currentPerson.setName(data);
                                    }else if(tagName.equals("age")){
                                                this.currentPerson.setAge(Short.parseShort(data));
                                    }
                        }
            }

             //接收文档的结尾的通知。在遇到结束标签的时候,调用这个方法。其中,uri表示元素的命名空间;
            //localName表示元素的本地名称(不带前缀);name表示元素的限定名(带前缀)
            @Override
            public void endElement(String uri, String localName, String name) throws SAXException {

                        if(localName.equals("person")){
                                    persons.add(currentPerson);
                                    currentPerson = null;
                        }

                        this.tagName = null;
            }
}
复制代码

 

2. DOM解析XML文件

     DOM解析XML文件时,会将XML文件的所有内容读取到内存中,然后允许您使用DOM API遍历XML树、检索所需的数据。使用DOM操作XML的代码看起来比较直观,并且,在某些方面比基于SAX的实现更加简单。但是,因为DOM需要将XML文件的所有内容读取到内存中,所以内存的消耗比较大,特别对于运行Android的移动设备来说,因为设备的资源比较宝贵,所以建议还是采用SAX来解析XML文件,当然,如果XML文件的内容比较小采用DOM是可行的。

复制代码
public static List<Person> readXML(InputStream inStream) {

            List<Person> persons = new ArrayList<Person>();

            DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();

            try {
                        DocumentBuilder builder = factory.newDocumentBuilder();
                        Document dom = builder.parse(inStream);

                        Element root = dom.getDocumentElement();

                        NodeList items = root.getElementsByTagName("person");//查找所有person节点

                        for (int i = 0; i < items.getLength(); i++) {
                                    Person person = new Person();

                                    //得到第一个person节点
                                    Element personNode = (Element) items.item(i);

                                    //获取person节点的id属性值
                                    person.setId(new Integer(personNode.getAttribute("id")));

                                    //获取person节点下的所有子节点(标签之间的空白节点和name/age元素)
                                    NodeList childsNodes = personNode.getChildNodes();

                                    for (int j = 0; j < childsNodes.getLength(); j++) {
                                                Node node = (Node) childsNodes.item(j); //判断是否为元素类型

                                                if(node.getNodeType() == Node.ELEMENT_NODE){   
                                                            Element childNode = (Element) node;

                                                        //判断是否name元素
                                                            if ("name".equals(childNode.getNodeName())) {
                                                                        //获取name元素下Text节点,然后从Text节点获取数据
                                                                       person.setName(childNode.getFirstChild().getNodeValue());                                                                               } else if (“age”.equals(childNode.getNodeName())) {
                                                                        person.setAge(new Short(childNode.getFirstChild().getNodeValue()));
                                                            }
                                                }
                                    }

                                    persons.add(person);
                        }

                        inStream.close();
            } catch (Exception e) {
                        e.printStackTrace();
            }

            return persons;
}
复制代码

 

3.Pull解析器解析XML文件

         Pull解析器的运行方式与 SAX 解析器相似。它提供了类似的事件,如:开始元素和结束元素事件,使用parser.next()可以进入下一个元素并触发相应事件。事件将作为数值代码被发送,因此可以使用一个switch对感兴趣的事件进行处理。当元素开始解析时,调用parser.nextText()方法可以获取下一个Text类型元素的值。

复制代码
//读取XML
public static List<Person> readXML(InputStream inStream) {

            XmlPullParser parser = Xml.newPullParser();

            try {
                        parser.setInput(inStream, "UTF-8");
                        int eventType = parser.getEventType();

                        Person currentPerson = null;
                        List<Person> persons = null;

                        while (eventType != XmlPullParser.END_DOCUMENT) {
                                    switch (eventType) {
                                    case XmlPullParser.START_DOCUMENT://文档开始事件,可以进行数据初始化处理
                                                persons = new ArrayList<Person>();
                                                break;

                                     case XmlPullParser.START_TAG://开始元素事件
                                                String name = parser.getName();
                                                if (name.equalsIgnoreCase("person")) {
                                                            currentPerson = new Person();
                                                            currentPerson.setId(new Integer(parser.getAttributeValue(null, "id")));
                                                } else if (currentPerson != null) {
                                                            if (name.equalsIgnoreCase("name")) {
                                                                        currentPerson.setName(parser.nextText());// 如果后面是Text元素,即返回它的值
                                                            } else if (name.equalsIgnoreCase("age")) {
                                                                        currentPerson.setAge(new Short(parser.nextText()));
                                                            }
                                                }
                                                break;
 
                                    case XmlPullParser.END_TAG://结束元素事件
                                                if (parser.getName().equalsIgnoreCase("person") && currentPerson != null) {
                                                            persons.add(currentPerson);
                                                            currentPerson = null;
                                                }

                                                break;
                                    }

                                     eventType = parser.next();
                        }

            inStream.close();
            return persons;
            } catch (Exception e) {
                        e.printStackTrace();
            }

            return null;
}

 
//成XML文件
//使用Pull解析器生成一个与itcast.xml文件内容相同的myitcast.xml文件。
public static String writeXML(List<Person> persons, Writer writer){

    XmlSerializer serializer = Xml.newSerializer();

    try {
        serializer.setOutput(writer);
        serializer.startDocument("UTF-8", true);

        //第一个参数为命名空间,如果不使用命名空间,可以设置为null
        serializer.startTag("", "persons");

        for (Person person : persons){
            serializer.startTag("", "person");
            serializer.attribute("", "id", person.getId().toString());
            serializer.startTag("", "name");
            serializer.text(person.getName());
            serializer.endTag("", "name");
            serializer.startTag("", "age");
            serializer.text(person.getAge().toString());
            serializer.endTag("", "age");
            serializer.endTag("", "person");
        }

        serializer.endTag("", "persons");
        serializer.endDocument();

        return writer.toString();
    } catch (Exception e) {
        e.printStackTrace();
    }

    return null;
}

 
//使用代码如下(生成XML文件):

File xmlFile = new File("myitcast.xml");
FileOutputStream outStream = new FileOutputStream(xmlFile);
OutputStreamWriter outStreamWriter = new OutputStreamWriter(outStream, "UTF-8");
BufferedWriter writer = new BufferedWriter(outStreamWriter);

writeXML(persons, writer);
writer.flush();
writer.close();

 
//如果只想得到生成的xml内容,可以使用StringWriter:
StringWriter writer = new StringWriter();
writeXML(persons, writer);
String content = writer.toString();
复制代码

 

 4.SAX和PULL使用

    区别为:SAX解析器的工作方式是自动将事件推入事件处理器进行处理,因此你不能控制事件的处理主动结束;而Pull解析器的工作方式为允许你的应用程序代码主动从解析器中获取事件,正因为是主动获取事件,因此可以在满足了需要的条件后不再获取事件,结束解析。
    你随便找个sax和pull的例子比较一下就可以发现,pull是一个while循环,随时可以跳出,而sax不是,sax是只要解析了,就必须解析完成。

 

FROM:http://www.cnblogs.com/devinzhang/archive/2012/01/16/2323668.html


安卓学习笔记30:解析XML与JSON 文章目录零、学习目标一、解析XML(一)XML概述(二)解析XML的方法二、案例演示 - 读取解析XML(一)运行效果(二)涉及知识点(三)实现步骤三、解析JSON(一)JSON概述(二)解析JSON的方法四、案例演示 - 读取解析SON(一)运行效果(二)涉及知识点(三)实现步骤 零、学习目标 能够读取并解析XML文件 能够读取并解析JSON文件 一、解析XML (一)XML概述 XML(eXtensible Markup Language),可扩展标记语言,标准通用标记语言的子集,是一种用于标记电 阅读详情

相关推荐

xml2code:用于android布局视图的代码生成器,可节省编​​码时间

XML 2 代码 android 布局视图的代码生成器,可节省编​​码时间。 它是如何工作的? 只需在应用程序图标上拖动布局文件(xml 类型),在剪贴板中获取生成的代码,将剪贴板文本粘贴到 eclipse(android IDE)中,右键单击代码,选择源代码->组织导入并直接进入您的想法,无需担心视图的声明。

Android解析XML

在Android平台上可以使用Simple API for XML(SAX) 、 Document Object Model(DOM)和Android附带的pull解析器解析XML文件。 下面是本例子要解析的XML文件:        李明     30           李向梅     25     例子定义了一个javabean用于存放上面解析出来的xml内容, 这个java

k763925053的专栏 687

XML解析框架比较

NULL 博文链接:https://qingkangxu.iteye.com/blog/1838405

Xsd2Code是什么?灵活的XML以及JSON模式的代码生成器

Xsd2Code是什么?灵活的XML以及JSON模式的代码生成器   什么是Xsd2Code ++?   开发人员生产力扩展基本上是一种创新的,灵活的XML以及JSON模式的代码生成器。它允许用户将XML文件放入C#甚至VB过程中,以供用户和开发人员使用,反之亦然,将序列化以及反序列化过程直接集成到集成的Microsoft Visual Studio中,也被认为拥有真正的生产力工具。它具有帮助程序员和用户控制XML文档的能力,甚至不需要了解XML或处理XML的方式。XML文档的处理过程基本上是用先前在X

q2315702359的博客 567

二进制、八进制、十六进制、十进制转换详解

二进制是计算机的语言,正如我们使用汉语表达与交流信息一样,任何信息在计算机中都以二进制的形式存储和计算。了解二进制与十进制等进制之间的转换方法,有助于我们了解计算机内部的数字计算过程,可以帮助我们在一定程度上理解信息在计算机中的编码和解码过程。本文先简单介绍位置化数字系统的概念,然后详细讲解二进制、八进制、十六进制、十进制之间的转换方法与原理。

2301_81674797的博客 2097

原子力显微镜AFM图像处理软件Gwyddion使用教程(图文)

Gwyddion使用教程Gwyddion简介Gwyddion user guide下载地址本次教程用的AFM扫描图像下载地址AFM/STM校准样品Gwyddion使用step1step2step3step4step5step6step7step8你没见过的CD磁道到底长啥样一张图总结 Gwyddion简介        &nbs...

王纯配的博客 5万+

[Android实例] 让人人都懂XML解析,Pull方式解析Xml的详尽注释

解析Xml有三种方式可选,sax ,dom ,pull  ,,各有各的优点,但在android上是不推荐使用DOM来解析的 一般都用SAX和PULL 这两个性能相近, SAX的解析方式大家可以去看MARS的教程 讲的也比较好喔 PULL的话我个人觉得处理事件比较简单,所以就给不懂的同学详细讲讲,嘿嘿....希望大家都能明白 感谢 传智的张老师,黎老师, 感谢勇军哥 首先给大家看看我的笔...

lihaimin的专栏 179

软考-高级-信息系统项目管理第四版(完整24章全笔记)

包 括:信息系统、业务应用信息系统、信息安全系统、信息系统工程、业务应用信息系统工程和 信息安全系统工程等业务应用信息系统是支撑业务运营的计算机应用信息系统,信息安全系统工程是指为了达到建设好信息安全系统的特殊需要而组织实施的工程。项目经理由执行组织委派, 负责领导团队实现项目目标。①制定项目章程:②制订项目管理计划:③指导与管理项目工作:④管理项目知识:⑤监控项目工作:⑥实施整体变更控制:项目范围管理过程包括:规划范围管理;收集需求;定义范围;创 建WBS;确认范围;控制范围;

weixin_44934104的博客 3万+

Android知识体系总结之Android部分之网络数据解析篇

Android知识体系总结之Android部分之网络数据解析篇 1.Json数据解析 JSONOBjcet FastJson Gson 三者对比 2.XML数据解析 Dom Sax Pull 三者比较

编程语言是方式,而思维是创造。 1813

OpenRA引擎实战:如何从零开始搭建一个经典RTS游戏模组(附资源包)

本文详细介绍了如何利用开源游戏引擎OpenRA从零开始搭建经典RTS游戏模组。内容涵盖开发环境配置、资源管线处理、YAML规则定义、地图编辑与Lua脚本编写等全流程实战指南,并提供了资源包,帮助开发者和爱好者快速创建属于自己的即时战略游戏世界。

silver的专栏 904

YOLOv11 改进 - 注意力机制 | EMA (Efficient Multi-Scale Attention) 高效多尺度注意力:跨空间学习与多分支协同增强特征表征,优化多尺度目标检测

本文介绍了高效多尺度注意力(EMA)模块及其在YOLOv11中的结合应用。现有注意力机制在通道维度缩减时可能影响深度视觉表示,EMA模块通过结合通道和空间信息、采用多尺度并行子网络结构等创新点,实现了高效的多尺度注意力机制。其基本原理包括通道和空间注意力结合、多尺度并行子网络设计等。在多个流行基准数据集上的实验表明,该模块能有效提高特征表示能力。我们将EMA集成进YOLOv11,实验证明改进后的模型在目标检测任务中性能优越,具有广泛应用前景

魔改工程师的博客 1293

Android学习笔记之AndroidManifest.xml文件解析

Android学习笔记之AndroidManifest.xml文件解析 一、关于AndroidManifest.xml AndroidManifest.xml 是每个android程序中必须的文件。它位于整个项目的根目录,描述了package中暴露的组件(activities, services, 等等),他们各自的实现类,各种能被处理的数据和启动位置。 除了能声明程序中的Activiti

androidboy365的专栏 502

【Google Play 上架】内部 / 封闭 / 开放 测试全解 — “只跑一个就能上架”?不行!

Google Play新规要求个人开发者账号在2023年11月13日后必须通过封闭测试(Closed testing)才能上架应用。封闭测试需要至少12名测试者连续14天保持参与状态,而内部测试和开放测试不能替代这一要求。三类测试轨道各有特点:内部测试用于快速内部验证,封闭测试是上架必经环节,开放测试面向更广泛用户但非必需。上架流程建议先内部测试修复问题,再启动封闭测试满足14天要求,最后申请生产发布。组织账号和早期个人账号可能不受此限制。开发者应提前规划测试人群,确保持续测试周期,并关注Play Cons

技术小甜甜:传播可落地技术,帮助个人和企业降低解决真实场景问题的成本 2799

Android中解析XML

XML在各种开发中都广泛应用,Android也不例外。作为承载数据的一个重要角色,如何读写XML成为Android开发中一项重要的技能。今天就由我向大家介绍一下在Android平台下几种常见的XML解析和创建的方法。在Android中,常见的XML解析器分别为SAX解析器、DOM解析器和PULL解析器,下面,我将一一向大家详细介绍。SAX解析器:SAX(Simple API for XML)解析器是一种基于事件的解析器,它的核心是事件处理模式,主要是围绕着事件源以及事件处理器来工作的。当事件源产生事件后,调

LiuHe 22万+

【数据集7】全球人类住区层GHSL数据详解

全球人类住区层GHSL数据详解

WW、forever的博客 2253

YOLO26改进 - C2PSA | C2PSA融合CPIASA跨范式交互与对齐自注意力机制 : 交互对齐机制,提升小目标与遮挡目标判别力 | ACM MM2025

本文介绍了跨范式表征与对齐Transformer(CPRAformer)及其核心的跨范式交互与对齐自注意力机制(CPIA - SA),并阐述了其在YOLO26中的结合应用。传统图像去雨模型特征提取局限大,CPIA - SA通过协同“空间 - 通道”与“全局 - 局部”范式解决该问题,由SPC - SA、SPR - SA和AAFM子模块构成,经双路提取、动态过滤、空间细化、对齐融合四步工作。我们将相关代码引入指定目录,在`ultralytics/nn/tasks.py`中注册,配置`yolo26 - C2PS

魔改工程师的博客 665

Android解析XML文件

按计划每周更新一篇技术博文,第一篇:《Android解析XML文件》 一、在Android应用中的XML文件来源 1、本地xml文件     本地XML文件可以放在应用根目录assets文件夹、res/xml、res/raw、SDcard卡、应用的data目录等; 除res/xml可直接通过getXml(int id)获取XML文档,返回一个解析器对象(XmlResourcePar

钟秀 4万+

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

Android Xml解析

1. 什么是XML XML (Extensible markup language): XML是一种标记语言,用于存储与传输数据。是常用的数据传输方式,区分大小写,文件扩展名为.xml。XML定义了一组用于以人类可读和机器可读的格式编码文档的规则。XML的设计目标集中在Internet的简单性,通用性和可用性上。它是一种文本数据格式,并通过Unicode对不同的人类语言提供了强大的支持,被W3C所推荐。 例如: <?xml version="1.0" encoding="utf-8"?> &

jerechen的博客 3801

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

安卓下xml文件的解析

------------------------------------------------------------------------- 下面介绍pull解析和sax解析xml的方式,dom一般不会在移动设备上使用,故略去。--------------------------------------------------------------------------}else if("weather".equals(currentTag))//是否是weather节点。

weixin_71792169的博客 1112

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

安卓开发工程师-数据解析(JSON、XML)

在解析 JSON 或 XML 数据时,可能会出现各种异常,如格式错误、数据缺失、类型不匹配等。为了保证程序的健壮性,需要对这些异常进行合理的处理。在解析 JSON 或 XML 数据时,可以将解析后的数据缓存起来,以便下次使用时可以直接从缓存中获取,而无需重新解析。在 Android 中,可以使用 DOM(Document Object Model)解析器来解析 XML 数据。动态解析是指在不知道 JSON 或 XML 数据的具体结构的情况下,能够灵活地解析和处理数据。包来解析 JSON 数据。

qq_62784677的博客 1049

安卓中的XML和JSON

XML和JSON其实还是比较常见了,JAVASE和JAVAEE的学习中或多或少会有些接触的,这篇文章主要关于XML和JSON在安卓中的一些应用。 XML 概述 XML是一种常用的存储数据方式,设计初衷就是为了传输和存储数据。 在Android平台中内部很多地方使用了XML存储: 比如之前的SharedPreferences的存储就是使用了XML文件,持久化存储的同时又兼具轻量的特性。(h...

旧日灯塔 3037

Android解析XML格式数据

Android解析XML格式数据

Android应用开发工程师 1645

Android之PULL解析XML

今天我们一起通过一个小例子来学习一下使用PULL解析器解析XML文件。 (1)首先我们放一个文件名为beauties.xml的XML文件到assets目录下,文件内容如下: 范冰冰 28 杨幂 23 然后在src目录下写一个与XML中

bear_huangzhen的专栏 2万+

【安卓笔记】安卓下xml文件的解析

安卓下解析xml文件有多种方式: dom: 通用性强,它会将XML文件的所有内容读取到内存中,然后允许您使用DOM API遍历XML树、检索所需的数据;简单直观,但需要将文档读取到内存,并不太适合移动设备; sax: SAX是一个解析速度快并且占用内存少的xml解析 器;采用事件驱动,它并不需要解析整个文档;实现:继承DefaultHandler,覆写startElement、

RowandJJ 2516

Android之SAX解析XML

首先我们来了解一下SAX解析器的基本知识: SAX(Simple API for XML)解析器是一种基于事件的解析器,事件驱动的流式解析方式是,从文件的开始顺序解析到文档的结束,不可暂停或倒退。它的核心是事件处理模式,主要是围绕着事件源以及事件处理器来工作的。当事件源产生事件后,调用事件处理器相应的处理方法,一个事件就可以得到处理。在事件源调用事件处理器中特定方法的时候,还要传递给事件处理器相

bear_huangzhen的专栏 1万+

Android XML数据解析

Android XML数据解析方法主要包括SAX、DOM和XmlPullParser三种方式。SAX基于事件驱动,适合大文件但代码复杂;DOM构建内存树结构,支持读写但占用内存高;XmlPullParser是Android推荐方式,轻量灵活。解析XML前需配置网络权限,数据可来自网络请求或本地文件。示例展示了SAX解析的实现步骤:创建SAXParser、定义事件处理逻辑并解析输入流。DOM解析则通过DocumentBuilder构建树形结构进行数据提取。开发者可根据需求选择适合的解析方法,注意处理异常和内存

m0_57545130的博客 1158
上一篇: 吐槽:Eclipse的外观做的真烂。
下一篇: Android中的引用传递和值传递分析(Java)
gamer_x
博客等级 码龄19年 17粉丝 6原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值