Android Studio JDOMException - SAX 驱动程序不支持的功能

问题描述 投票:0回答:0

我在 Android Studio 中使用 JDOM2 库时遇到问题。我的应用程序编译并运行,但一旦使用包含 JDOM 的方法,我就会收到此错误:

java.lang.RuntimeException: java.lang.reflect.InvocationTargetException
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:558)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:936)
     Caused by: java.lang.reflect.InvocationTargetException
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:548)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:936) 
     Caused by: org.jdom2.JDOMException: http://xml.org/sax/features/external-general-entities feature http://xml.org/sax/features/external-general-entities not supported for SAX driver org.apache.harmony.xml.ExpatReader
        at org.jdom2.input.SAXBuilder.internalSetFeature(SAXBuilder.java:1011)
        at org.jdom2.input.SAXBuilder.configureParser(SAXBuilder.java:984)
        at org.jdom2.input.SAXBuilder.buildEngine(SAXBuilder.java:859)
        at org.jdom2.input.SAXBuilder.getEngine(SAXBuilder.java:907)
        at org.jdom2.input.SAXBuilder.build(SAXBuilder.java:1104)

我已经通读了 JDOM2 GitHub 页面 解释了如何在 Android Studio 中使用 JDOM,但是我收到的错误没有得到解释。我的 XML 文件中没有任何外部实体,所以我不确定为什么会出现此错误。

我编写的 JDOM2 方法在 IntelliJ 中运行良好,但在 Android Studio 中抛出此错误。我不知道现在该怎么做。

我采取的步骤:

  • 完全更新的 Android Studio
  • 检查并重新检查我的 XML 文件中的外部实体。
  • 已添加
    <uses-library android:name="org.apache.http.legacy" android:required="false" />
    以尝试让 Android Studio 使用支持外部通用实体的 SAX 构建器。

即使是非常基本的、微小的 XML,它仍然会崩溃。 (这不是我在我的应用程序中使用的,它只是一个非常简单的示例 XML。)

<root>
    <color>
        <name>Blue</name>
        <hex>0000FF</hex>
    </color>
    <color>
        <name>Red</name>
        <hex>FF0000</hex>
    </color>
    <color>
        <name>Green</name>
        <hex>00FF00</hex>
    </color>
</root>

还有我拉取数据的方法:

public static String getHex(String colorName) throws JDOMException, IOException {
        final String filename = "src/main/assets/test.xml";
        SAXBuilder parser = new SAXBuilder();
        Document test = (Document) parser.build(new File(filename));

        Element rootNode = test.getRootElement();
        List<Element> colorList = rootNode.getChildren("color");
        String hex = "";
        for (Element element : colorList) {
            if (element.getChildText("name").equalsIgnoreCase(colorName)) {
                hex = element.getChildText("hex");
            }
        }
        return hex;
    }
android saxparser jdom-2
© www.soinside.com 2019 - 2024. All rights reserved.