如何在 Java 中为 Android 编写 XML 内容?

Posted

技术标签:

【中文标题】如何在 Java 中为 Android 编写 XML 内容?【英文标题】:How to write XML content in Java for Android? 【发布时间】:2015-09-28 22:17:15 【问题描述】:

我需要一点帮助...我想在单击保存按钮时将分数写入 XML 文件,并在应用下次启动时自动检索保存的分数。

我编写了以下代码来保存分数,但不幸的是它不起作用。根本没有创建文件:

    public void savescore() throws TransformerException, ParserConfigurationException 

    DocumentBuilderFactory docFactory = DocumentBuilderFactory.newInstance();
    DocumentBuilder docBuilder = docFactory.newDocumentBuilder();
    Document xmlDoc = docBuilder.newDocument();
    Element scores = xmlDoc.createElement("score");

    Element adityag= xmlDoc.createElement("aditya");
    adityag.appendChild(xmlDoc.createTextNode(adityas.getText().toString()));
    Element ameyg= xmlDoc.createElement("amey");
    ameyg.appendChild(xmlDoc.createTextNode(ameys.getText().toString()));
    Element akshadag= xmlDoc.createElement("akshada");
    akshadag.appendChild(xmlDoc.createTextNode(akshadas.getText().toString()));
    Element anirudhg= xmlDoc.createElement("anirudh");
    anirudhg.appendChild(xmlDoc.createTextNode(anirudhs.getText().toString()));
    Element aashig= xmlDoc.createElement("aashi");
    aashig.appendChild(xmlDoc.createTextNode(aashis.getText().toString()));
    Element dhvanig= xmlDoc.createElement("dhvani");
    dhvanig.appendChild(xmlDoc.createTextNode(dhvanis.getText().toString()));
    Element mering= xmlDoc.createElement("merin");
    mering.appendChild(xmlDoc.createTextNode(merins.getText().toString()));
    Element swapnilg= xmlDoc.createElement("swapnil");
    swapnilg.appendChild(xmlDoc.createTextNode(swapnils.getText().toString()));
    Element architg= xmlDoc.createElement("archit");
    architg.appendChild(xmlDoc.createTextNode(archits.getText().toString()));
    Element shreyag= xmlDoc.createElement("shreya");
    shreyag.appendChild(xmlDoc.createTextNode(shreyas.getText().toString()));

    scores.appendChild(adityag);
    scores.appendChild(ameyg);
    scores.appendChild(akshadag);
    scores.appendChild(anirudhg);
    scores.appendChild(aashig);
    scores.appendChild(dhvanig);
    scores.appendChild(mering);
    scores.appendChild(shreyag);
    scores.appendChild(swapnilg);
    scores.appendChild(architg);

    TransformerFactory transformerFactory = TransformerFactory.newInstance();
    Transformer transformer = transformerFactory.newTransformer();
    DOMSource source = new DOMSource(xmlDoc);
    StreamResult result = new StreamResult(new File(Environment.getExternalStorageDirectory().getAbsolutePath() + "/" + "userData.xml"));
    transformer.transform(source, result);

我的代码出了什么问题?

编辑:添加@Gabriella 建议的权限后,现在创建空 XML 文件

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>

【问题讨论】:

文件夹是否已经存在? 没有,但我试着只放 StreamResult result = new StreamResult(new File("userData.xml"));仍然没有运气.. 先尝试创建文件夹。我想这会导致问题。 "" 不起作用,因为您没有直接在根目录上写入的权限 我不好,评论已编辑..请检查.. 问题标题具有误导性。 【参考方案1】:

将写入外部存储的权限添加到清单文件中

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>

或者看看这个问题:how to create xml file in android

编辑:

我认为您的代码应该如下所示,因为您现在将空元素附加到 xml 文档:

public void savescore() throws TransformerException, ParserConfigurationException 

    DocumentBuilderFactory docFactory = DocumentBuilderFactory.newInstance();
    DocumentBuilder docBuilder = docFactory.newDocumentBuilder();
    Document xmlDoc = docBuilder.newDocument();
    Element scores = xmlDoc.createElement("score");

    Element adityag= xmlDoc.createElement("name1");
    adityag.appendChild(xmlDoc.createTextNode(name1.getText().toString()));
    Element ameyg= xmlDoc.createElement("name2");
    ameyg.appendChild(xmlDoc.createTextNode(name2.getText().toString()));
    Element akshadag= xmlDoc.createElement("name3");
    akshadag.appendChild(xmlDoc.createTextNode(name3.getText().toString()));
    Element anirudhg= xmlDoc.createElement("name4");
    anirudhg.appendChild(xmlDoc.createTextNode(name4.getText().toString()));
    Element aashig= xmlDoc.createElement("name5");
    aashig.appendChild(xmlDoc.createTextNode(aname5.getText().toString()));
    Element dhvanig= xmlDoc.createElement("name6");
    dhvanig.appendChild(xmlDoc.createTextNode(name6.getText().toString()));
    Element mering= xmlDoc.createElement("name7");
    mering.appendChild(xmlDoc.createTextNode(name7.getText().toString()));
    Element swapnilg= xmlDoc.createElement("name8");
    swapnilg.appendChild(xmlDoc.createTextNode(name8.getText().toString()));
    Element architg= xmlDoc.createElement("name9");
    architg.appendChild(xmlDoc.createTextNode(name9.getText().toString()));
    Element shreyag= xmlDoc.createElement("name10");
    shreyag.appendChild(xmlDoc.createTextNode(name10.getText().toString()));

    scores.appendChild(adityag);
    scores.appendChild(ameyg);
    scores.appendChild(akshadag);
    scores.appendChild(anirudhg);
    scores.appendChild(aashig);
    scores.appendChild(dhvanig);
    scores.appendChild(mering);
    scores.appendChild(swapnilg);
    scores.appendChild(architg);
    scores.appendChild(shreyag);

    xmlDoc.appendChild(scores);

    TransformerFactory transformerFactory = TransformerFactory.newInstance();
    Transformer transformer = transformerFactory.newTransformer();
    DOMSource source = new DOMSource(xmlDoc);
    StreamResult result = new StreamResult(new File(Environment.getExternalStorageDirectory().getAbsolutePath() + "/" + "RummyScore" + "/" + "userData.xml"));
    transformer.transform(source, result);

是name1、nam2、name3等TextViews吗?

【讨论】:

我已添加该权限.. 现在创建了空的 xml 文件。 你在哪里定义name1name2等?他们不应该像这样:Element adityag= xmlDoc.createElement("name1");adityag.appendChild(xmlDoc.createTextNode(adityag.getText().toString())); 吗? 你永远不会将Elements 像adityag 附加到根目录。在这里您可以找到相同 xml-document-creation mkyong.com/java/how-to-create-xml-file-in-java-dom 的示例示例 我试图对这些名字保密,但忘了在那里编辑(现在编辑后)..我只遵循了那个教程.. 请尝试编辑我的答案,我认为它可以帮助您,您应该将 Element 节点而不是 TextViews 附加到根元素

以上是关于如何在 Java 中为 Android 编写 XML 内容?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Flutter 中为 Web 编写特定于平台的代码?

如何使用 OS Lollipop 在 Java 中为 Android 裁剪图像

java - 如何在java android中为Gridview的父类BaseAdapter实现viewBinding?

如何在 JAVA 中为所有相似类型的 bean 编写通用代码

如何在 Node JS 中为 ActiveMQ 编写发送方应用程序

如何在 android studio 中为线性布局制作“波浪”边框?