当前位置: 首页 > 面试题库 >

Android创建XML并将其写入文件

贺宏逸
2023-03-14
问题内容

我正在学习有关Android应用程序开发的课程,并尝试创建xml文件并将其写入android的内部存储中。就方法而言,我在最初设置时遇到问题。我已经写了大部分,但有我无法弄清的错误。也许因为我整天都在工作,所以不知道。这是我本节课的代码。我遇到的错误是公共String宝藏和FileOutputStream上的非法修饰符。任何帮助,将不胜感激。

好的,我找出了最初的问题,需要使用try / catch。能够运行,并且一切正常,直到我进入保存文件。现在出现错误:

SoundPool error loading/system./media./audio./ui/KeypressReturn.ogg.  
AudioService Soundpool could not load file: /system/media/audio/ui/KeypressReturnj.ogg

这是在“创建文件”写入日志之后。我猜它正在尝试写入错误的文件?需要它写入/ data / data。我的应用程序中没有音频。我在下面添加了新代码:

旧代码:

    public void onSaveTreasureClick(View v) throws FileNotFoundException{
        Log.v("SaveTreasure","Button was clicked");
        File f = new File(getFilesDir(),"treasure.xml");
        FileOutputStream myFile=openFileOutput(f);
        Log.v("WriteFile","file created");


        private FileOutputStream openFileOutput(File f) {
            // TODO Auto-generated method stub
            return null;
        }



    public String treasures(Treasure treasure) throws Exception{

        XmlSerializer xmlSerializer = Xml.newSerializer();
        StringWriter write = new StringWriter();
        final EditText tres=(EditText) findViewById(R.id.treasureNametxt);
        String treasureName=tres.getText().toString();
        final EditText c1=(EditText) findViewById(R.id.clue1Txt);
        String clue1=c1.getText().toString();
        final EditText c2=(EditText) findViewById(R.id.clue2Txt);
        String clue2=c2.getText().toString();
        final EditText c3=(EditText) findViewById(R.id.clue3Txt);
        String clue3=c3.getText().toString();
        final EditText ans=(EditText) findViewById(R.id.answerTxt);
        String answer = ans.getText().toString();
        final EditText loc =(EditText) findViewById(R.id.locationTxt);
        String location = loc.getText().toString();
        final EditText pv=(EditText) findViewById(R.id.pointValueTxt);
        String pointValue=pv.getText().toString();

        xmlSerializer.setOutput(write);
    //start Document
        xmlSerializer.startDocument("UTF-8",true);
    //open tag <items>
        xmlSerializer.startTag("", "Items");
        xmlSerializer.startTag("", "Treasures");

        xmlSerializer.startTag("", "TreasureName");
        xmlSerializer.attribute("", TreasureName, treasureName);
        xmlSerializer.endTag("", "TreasureName");

        xmlSerializer.startTag("", "Clue1");
        xmlSerializer.attribute("", "Clue1", clue1);
        xmlSerializer.endTag("", "Clue1");

        xmlSerializer.startTag("", "Clue2");
        xmlSerializer.attribute("", "Clue2", clue2);
        xmlSerializer.endTag("", "Clue2");

        xmlSerializer.startTag("", "Clue3");
        xmlSerializer.attribute("", "Clue3", clue3);
        xmlSerializer.endTag("", "Clue3");

        xmlSerializer.startTag("", "answer");
        xmlSerializer.attribute("", "answer", answer);
        xmlSerializer.endTag("","answer");

        xmlSerializer.startTag("", "location");
        xmlSerializer.attribute("", "location", location);
        xmlSerializer.endTag("", "location");

        xmlSerializer.startTag("", "Points");
        xmlSerializer.attribute("", "PointValue", pointValue);
        xmlSerializer.endTag("", "Points");

        xmlSerializer.endTag("","Treasures");
        xmlSerializer.endTag("", "Items");

        xmlSerializer.endDocument();

        return treasure.toString();

    }

    }

}

新代码:

public void onSaveTreasureClick(View v) throws FileNotFoundException, SAXException{
        Log.v("SaveTreasure","Button was clicked");
        File f = new File(getFilesDir(),"treasure.xml");
        FileOutputStream myFile=openFileOutput(f);
        Log.v("WriteFile","file created");


    //  private FileOutputStream openFileOutput(File f) {
            // TODO Auto-generated method stub
        //  return null;
    //  }


try{
    final String treasures;

        XmlSerializer xmlSerializer = Xml.newSerializer();
        StringWriter writer = new StringWriter();
        final EditText tres=(EditText) findViewById(R.id.treasureNametxt);
        String treasureName=tres.getText().toString();
        final EditText c1=(EditText) findViewById(R.id.clue1Txt);
        String clue1=c1.getText().toString();
        final EditText c2=(EditText) findViewById(R.id.clue2Txt);
        String clue2=c2.getText().toString();
        final EditText c3=(EditText) findViewById(R.id.clue3Txt);
        String clue3=c3.getText().toString();
        final EditText ans=(EditText) findViewById(R.id.answerTxt);
        String answer = ans.getText().toString();
        final EditText loc =(EditText) findViewById(R.id.locationTxt);
        String location = loc.getText().toString();
        final EditText pv=(EditText) findViewById(R.id.pointValueTxt);
        String pointValue=pv.getText().toString();

        xmlSerializer.setOutput(writer);
    //start Document
        xmlSerializer.startDocument("UTF-8",true);
    //open tag <items>
        xmlSerializer.startTag("", "Items");
        xmlSerializer.startTag("", "Treasures");

        xmlSerializer.startTag("", "TreasureName");
        xmlSerializer.attribute("", treasureName, treasureName);
        xmlSerializer.endTag("", "TreasureName");

        xmlSerializer.startTag("", "Clue1");
        xmlSerializer.attribute("", "Clue1", clue1);
        xmlSerializer.endTag("", "Clue1");

        xmlSerializer.startTag("", "Clue2");
        xmlSerializer.attribute("", "Clue2", clue2);
        xmlSerializer.endTag("", "Clue2");

        xmlSerializer.startTag("", "Clue3");
        xmlSerializer.attribute("", "Clue3", clue3);
        xmlSerializer.endTag("", "Clue3");

        xmlSerializer.startTag("", "answer");
        xmlSerializer.attribute("", "answer", answer);
        xmlSerializer.endTag("","answer");

        xmlSerializer.startTag("", "location");
        xmlSerializer.attribute("", "location", location);
        xmlSerializer.endTag("", "location");

        xmlSerializer.startTag("", "Points");
        xmlSerializer.attribute("", "PointValue", pointValue);
        xmlSerializer.endTag("", "Points");

        xmlSerializer.endTag("","Treasures");
        xmlSerializer.endTag("", "Items");

        xmlSerializer.endDocument();

        writer.toString();
                myFile.write(writer.toString().getBytes());

}
catch (FileNotFoundException e) {
    System.err.println("FileNotFoundException: " + e.getMessage());
    throw new SAXException(e);

} catch (IOException e) {
    System.err.println("Caught IOException: " + e.getMessage());
}

}

问题答案:

我想通了。我没有正确使用属性标签。快来找出答案,我什至不需要使用它。正确的方法是执行以下操作:

xmlSerializer.startTag("", "TreasureName");
xmlSerializer.text(treasureName);
xmlSerializer.endTag("","TreasureName");

更改所有这些文件之后,我便可以创建文件并将数据写入其中。



 类似资料:
  • 问题内容: 我需要创建一个新的XML文件并将其写入服务器。因此,我正在寻找创建新XML文件,为其写入一些基本节点,保存文件的最佳方法。然后再次打开它并写入更多数据。 我一直在保存文件。但是,要创建一个新的并编写一些基本节点,我不确定最好的方法。 有想法吗? 问题答案: DOMDocument是一个不错的选择。这是一个专门用于创建和处理XML文档的模块。您可以从头开始创建文档,或打开现有文档(或字符

  • 有Java开发人员的库,有大量的方法在Android上不起作用。 我开始使用像OpenCSV这样的库,但不幸的是,Excel已经知道了打开CSV文件的问题。 然后我试着用: ApachePOI——它的方法肯定太多了 JExcelAPI——它可以工作,但只在旧的二进制文件上工作。xls文件 docx4j——还是太多JAR了,因为它基于JAXB,而Android中不包括JAXB 我的问题是,如何在中创

  • 问题内容: 我需要读取文件路径为“ C:\ file.pdf”的pdf文件,并将其写入outputStream。最简单的方法是什么? ................................................... ................................................... 问题答案: import java.io.*; 到目前为止

  • 问题内容: 我试图将XML 存储到XML文件中,以便稍后可以检索信息,然后将其显示回控制台。 有人可以告诉我最有效的方法吗? 编辑: 这是我要写入外​​部文件的内容 这一切都创建了一个Bank用户,该用户被扔到中,然后我想存储他们的信息,以便稍后返回并重新显示。 问题答案: //根据需要修改下面的类 //下面的类实际写了

  • 我有一个包含数百个csv文件的文件夹。每个文件都有日期作为它的名称,因为我的目录中的数据每天都在创建,例如2020-01-15.csv、2020-01-16.csv、2020-01-17.csv等。我正在寻找一个最好的方法来每天导入我的文件到mysql数据库中,并为每个文件创建表(不需要创建表,如果表的文件名已经存在)。 到目前为止,为了将文件导入到mysql数据库中,我使用了,但我当时使用它导入

  • 我想创建一个应用程序,每天从一个文件夹中读取一次多个xml文件,然后读取它们并提取数据并构建一个新的xml文件,我想知道哪个选项更适合这种情况: 使用Spring批处理读取并处理所有文件,然后写入新文件