【问题标题】:File saved in internal storage is not being preserved保存在内部存储中的文件未保留
【发布时间】:2015-01-31 11:40:58
【问题描述】:

我正在尝试将 xml 文件保存到 Android 的内部存储中。但是,该文件没有得到保留。每次我重新启动模拟器时,文件都是空的。只有当我在应用程序中手动选择向其写入内容时,该文件才会将内容写入其中。然后,如果我关闭应用程序或其他任何东西,文件内容就会被保留。但是,当我关闭模拟器时,文件会在那里,但为空。

因此,我不确定我是否正确保存它。

请看一下我的代码,也许它有问题,或者我的 Android 模拟器的某些设置有问题。

public static void store(Context c, String filename, int width, int height, int rooms, int expected_partiters, BSPNode root, Cells cells, int[][] dists, int startX, int startY)
{
     try {

            DocumentBuilderFactory docFactory = DocumentBuilderFactory.newInstance();
            DocumentBuilder docBuilder = docFactory.newDocumentBuilder();
            Document doc = docBuilder.newDocument();


            // root elements
            storeMaze(width, height, rooms, expected_partiters, root, cells, dists, startX, startY, doc);

            String serializedDoc = MazeFileWriter.getStringFromDoc(doc);
            try {
                FileOutputStream fos = c.openFileOutput("data_test.xml", Context.MODE_PRIVATE);
                fos.write(serializedDoc.getBytes());
                fos.close();
            } catch (FileNotFoundException e) {
                e.printStackTrace();
            } catch (IOException e) {
                e.printStackTrace();
            }

     } catch (ParserConfigurationException pce) {
         pce.printStackTrace();
     }
}

static String getStringFromDoc(org.w3c.dom.Document doc) {
    try
    {
       DOMSource domSource = new DOMSource(doc);
       StringWriter writer = new StringWriter();
       StreamResult result = new StreamResult(writer);
       TransformerFactory tf = TransformerFactory.newInstance();
       Transformer transformer = tf.newTransformer();
       transformer.transform(domSource, result);
       writer.flush();
       return writer.toString();
    }
    catch(TransformerException ex)
    {
       ex.printStackTrace();
       return null;
    }
}

我是 Android 初学者,欢迎提出任何建议!

【问题讨论】:

    标签: android internal-storage


    【解决方案1】:

    如果我正确理解您的代码,您在读取部分使用 StringWriter。我想你想要一个 StringReader。

    如果这不是你想要做的(阅读),我可以看得更远,这正是引起我注意的地方。

    【讨论】:

    • 文件写入正确,我通过Android的DDMS手动检查了文件内容。但是,问题是当我关闭模拟器时文件没有得到保存。断电后文件为空。会不会是这个原因?
    • getStringFromDoc 方法不是读取,而是写入......所以它永远不会返回任何内容。交换阅读,看看它给了你什么。
    • 如果您在模拟器停止之前实际读取正确,请检查您的设置,确保模拟器未设置为在每次加载时重置用户数据。
    • 我使用的是这里的代码:stackoverflow.com/questions/10356258/…
    • :) 发生在我们最好的人身上。很高兴你找到它!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-10-21
    • 1970-01-01
    • 2023-03-14
    • 2011-08-11
    • 1970-01-01
    • 1970-01-01
    • 2023-03-10
    相关资源
    最近更新 更多