Как написать XML-контент на Java для 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("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);
}
Что не так с моим кодом?
РЕДАКТИРОВАТЬ: пустой XML-файл теперь создается после добавления разрешения, предложенного @Gabriella
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
1 ответ
Добавьте разрешение на запись во внешнее хранилище в файл манифеста
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
или взгляните на этот вопрос: как создать XML-файл в 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?