-2
public boolean editXML(String newCar) {
    try {
        String myXMLfile = "res\\values\\cars.xml";

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

        Node string_array = doc.getElementsByTagName("string-array")
                .item(0);

        Element item = doc.createElement("item");
        item.setTextContent(newCar);
        string_array.appendChild(item);

        TransformerFactory transformerFactory = TransformerFactory.newInstance();
        Transformer transformer = transformerFactory.newTransformer();
        DOMSource source = new DOMSource(doc);
        StreamResult result = new StreamResult(new File(myXMLfile));
        transformer.transform(source, result);
        return true;
    } catch (Exception e) {
        return false;
    }
}

如果我运行一个普通的 JAVA 项目,上面的函数可以正常工作,但是,如果我在一个 android 项目中运行它,它会返回 false。问题出在哪里?如何在 android 项目中预览 e.printstacktrace 以便我可以看到异常的内容?

4

2 回答 2

2

第一个问题:

} catch (Exception e) {
    return false;
}

Exception会使抛出的任何代码静音,并且不能帮助您诊断问题。至少打印异常堆栈跟踪以记录,例如

} catch (Exception e) {
    android.util.Log.e("tag", "", e);
    return false;
}

第二个问题:

String myXMLfile = "res\\values\\cars.xml";

Android 资源在构建过程中被编译成二进制形式。您的应用无法通过这种方式使用它们。要从资源中读取 XML,请参阅例如Android:从本地资源读取 XML(用于测试)

第三个问题:谁知道呢,先修复前面的。

于 2013-10-28T08:27:12.397 回答
0

堆栈跟踪可以在 LogCat 窗口中查看。如果没有显示,在 Eclipse 中,您必须转到 Window > Show View > Other,然后您应该在 Android 部分下找到 Logcat。对于 Android Studio,这个问题的图片可能比任何解释都好:)

如果没有错误跟踪,很难说您的解析问题出在哪里......要在 Logcat 中显示堆栈跟踪,请添加e.printStackTrace();到您的 catch 块。

于 2013-10-27T19:03:24.803 回答