2013-08-24 72 views
5

我正在学习android应用程序开发课程,并试图创建一个xml文件并将其写入android的内部存储。就方法而言,我最初如何设置这个问题存在问题。我写了大部分,但有错误,我不明白。也许因为我整天都在做这件事,我不知道。这是我的这个类的代码。我得到的错误是公共字符串宝藏和FileOutputStream上的非法修饰符。任何帮助,将不胜感激。Android创建和向文件写入xml

好吧,我想出了最初的问题,需要使用try/catch。能够运行,一切正常,直到我到了保存文件。立即获取错误:

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

这是在“创建文件”写入日志之后。我猜它试图写入错误的文件?需要写入/数据/数据。我的应用中没有音频。我已经添加下面的新代码:

旧代码:

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()); 
} 

} 
+0

stacktraces ....? – danijoo

+0

我是新手......对不起,我不明白。 –

+0

在模拟器上运行代码或将设备连接到计算机时,A​​ndroid日志将在程序崩溃时显示堆栈跟踪。这是一系列错误日志,显示导致未捕获异常的方法链。 – Tenfour04

回答

6

我想通了这一个了。我错误地使用了属性标签。来找出,我甚至不需要使用它。正确的方法是做到以下几点:

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

后改变所有的人,我能够创建文件和数据写入。