我正在尝试使用“内部存储”方法来保留我的数据。在下面的代码中,我正在尝试将xml写入存储。这是正确的方法吗?我正在尝试打开这个文件使用fileInputStream但是我看到的那个类的唯一函数是.read(),它显然一次读取一个字节的数据。这对于读取xml文件来说似乎很不方便。我该如何最好地读/写我的数据?
@Override
protected void onDestroy() {
super.onDestroy();
try {
FileOutputStream fos=openFileOutput(LOCALSTORAGEFILE,Context.MODE_PRIVATE);
XmlCreator create=new XmlCreator();
fos.write(create.subjectListToXml(subjectMasterList).getBytes());
fos.close();
} catch (IOException ex) {
Logger.getLogger(MainActivity.class.getName()).log(Level.SEVERE, null, ex);
}
public class XmlCreator {
XmlSerializer serializer=Xml.newSerializer();
StringWriter writer=new StringWriter();
public String subjectListToXml(ArrayList<Subject> masterList){
try{
serializer.setOutput(writer);
serializer.startDocument("UTF-8", true);
serializer.startTag("", "subjects");
serializer.attribute(null, null, null);
for(Subject subject:masterList){
serializer.endTag("","subject");
for(Cards card:subject.getCards()){
serializer.startTag("","card");
serializer.startTag("","word");
serializer.text(card.getCardFront());
serializer.endTag("","word");
serializer.endTag("", "card");
}
serializer.endTag("", "subject");
}
serializer.endTag("","subjects");
serializer.endDocument();
}catch(Exception e){
e.printStackTrace();
}
return writer.toString();
}
}
答案 0 :(得分:1)
没有必要重新发明东西。考虑使用SharedPreferences。
如果你仍然想要使用你的XML格式并希望以正确的方式阅读它,这里有一些可以帮助你入门:
InputStream is = ...
DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance();
DocumentBuilder dBuilder = dbFactory.newDocumentBuilder();
Document doc = dBuilder.parse(is);
doc.getDocumentElement().normalize();
NodeList myTags = doc.getElementsByTagName("your_xml_tag");
我还强烈推荐XML / JSON-library Jackson。它只需几行代码即可读取和保存完整的对象。