android - 用xml持久化数据,如何实现一个xml读取器?

标签 android xml persistent-data

我正在尝试使用“内部存储”的方法来保留我的数据。在下面的代码中,我试图将 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();
    }
}

最佳答案

没有必要重新发明东西。考虑使用 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 库 Jackson .只需几行代码即可读取和保存完整的对象。

关于android - 用xml持久化数据,如何实现一个xml读取器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14431340/

相关文章:

data-structures - 具有持久数据结构的 Javascript 函数库

android - 独立服务中出现 ANR 的可能性

java - 如何调用 UsbDevice.getDeviceName() 方法 - 没有错误(无法从静态上下文引用)

xml - 使用XSLT选择另一个节点中不存在的所有元素

java - XML/Java : Precise line and character positions whilst parsing tags and attributes?

java - 完全持久链表

c# - SmsManager.SendTextMessage 抛出异常

android - 带有 setImageResource 的 AnimationDrawable 没有拉伸(stretch)图像?

xml - Hadoop Hive XPaths仅返回阵列的一部分

algorithm - 在二维平面中拟合线段