2013-08-24 20 views
5

Biorę udział w kursie na temat tworzenia aplikacji dla systemu Android i próbuję utworzyć i zapisać plik xml do pamięci wewnętrznej na Androidzie. Mam problemy z początkową konfiguracją, jeśli chodzi o metody. Napisałem większość, ale mam błędy, których nie mogę zrozumieć. Może dlatego, że pracuję nad tym cały dzień, nie wiem. Oto mój kod dla tej klasy. Błędy, które dostaję, są nielegalnymi modyfikatorami publicznych skarbików i FileOutputStream. Każda pomoc będzie doceniona.Tworzenie i zapisywanie pliku xml do pliku na Androidzie

Ok, zorientowałem się, początkowy problem, potrzebne do użycia try/catch. Mogłem biec i wszystko działało dobrze, dopóki nie dotarłem do pliku zapisu. Otrzymanie komunikatu o błędzie:

Pojawia się zaraz po zapisaniu "pliku utworzonego" w dzienniku. Zgaduję, że próbuje napisać do niewłaściwego pliku? Potrzebujesz go do zapisania w/data/data. Brak dźwięku w mojej aplikacji. Dodałem nowy kod poniżej:

stary kod:

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

    } 

    } 

} 

Nowy Kod:

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

Jestem nowicjuszem ... przepraszam, nie rozumiem. –

+0

Po uruchomieniu kodu na emulatorze lub urządzeniu podłączonym do komputera dziennik systemu Android wyświetli ślad stosu, gdy program ulegnie awarii. Jest to seria dzienników błędów, które pokazują łańcuch metod, które doprowadziły do ​​niezauważalnego wyjątku. – Tenfour04

Odpowiedz

6

Pomyślałem ten jeden. Używałem niepoprawnie tagu atrybutu. Przyjdź, aby się przekonać, że nawet nie potrzebowałem go używać. Prawidłowym sposobem było wykonanie następujących czynności:

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

Po zmianie ich wszystkich udało mi się utworzyć plik i zapisać do niego dane.

Powiązane problemy