簡體   English   中英

Android創建和編寫xml到文件

[英]Android creating and writing xml to file

我正在學習Android應用程序開發課程,並嘗試創建並編寫一個xml文件到android上的內部存儲。 就方法而言,我最初如何設置這個問題。 我寫了大部分但有錯誤,我無法弄清楚。 也許是因為我整天都在努力,我不知道。 這是我這堂課的代碼。 我得到的錯誤是公共字符串寶藏和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");

更改完所有內容后,我就可以創建文件並將數據寫入其中。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM