- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我之前曾大量使用 native Java 1.6 Stax 解析器用 Java 编写过一个库。然而,我现在想在 Android 上使用这个库,这意味着这个解析器不受支持。我想使用 Woodstox,因为它实现了 Stax 1.0 api,并且我不必重写任何当前代码,只需在依赖项中进行 sub 即可。
Android 没有 stax 1 api,所以我意识到我必须添加它。现在,我已将 woodstox-core-asl-4.2.0.jar、stax-api-1.0-2.jar 和 stax2-api-3.1.3.jar 添加到类路径中。一切都编译得很好,但是当我实际尝试运行依赖于这个库的 Android 应用程序时,我收到运行时错误,表明它没有使用 Woodstox 作为 stax 1 api 的实现。
我是否有误解或做错了什么?我缺一个 jar 吗?我读过Woodstox help page彻底但找不到任何我丢失的东西。
编辑:我开始怀疑是否真的可以在 Android 上使用 Woodstox。问题在于对 stax api 的依赖。经过一些研究,我发现 Dalvik VM 似乎无法处理 javax.* 命名空间中的这些包。
最佳答案
您如何传递 XMLInputFactory
/XMLOutputFactory
实例?通常最好直接构造实例(WstxInputFactory
、WstxOutputFactory
),因为调用 XMLInputFactory.newInstance()
没有真正的好处:最多它会增加开销(慢得多,扫描类路径)。
您没有缺少任何 jar:core 和 stax2-api 总是需要的;如果平台不包含 Stax API jar(Android 由于某种奇怪的原因不包含 Stax API jar,即使它是 JDK 1.6 的一部分),那么就是那个。
编辑:
自动发现应该基于以下几点:
XMLInputFactory
(等)检查匹配的系统属性(“javax.xml.stream.XMLInputFactory”)是否具有值;这是要使用的工厂的类名(如果有)。因此您可以使用特定的 impl 值设置系统属性META-INF/services/javax.xml.stream.XMLInputFactory
可以读取;一行包含类名Woodstox 提供 SPI 信息(步骤 2),以自动注册自身。但由于在 Android 上您重新打包 jar(作为 Android 包、APK?),因此资源文件可能未包含或未找到。如果这是根本原因,您仍然可以设置匹配的系统属性。如果没有,您将需要使用其他方式提供类名或工厂实例。
关于java - Android 上的伍德斯托克斯,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20365186/
我是一名优秀的程序员,十分优秀!