android - 适用于 Android 的 Olingo OData 2.0 - 对 javax.xml.stream.XMLInputFactory 的依赖

标签 android odata compatibility classnotfoundexception olingo

我尝试在 Android 中使用 Apache Olingo OData 2.0 实现 OData V2 客户端

将客户端类作为 java 类执行工作正常,但我无法在 AsyncTask 中使用相同的代码运行 Android 应用程序:

E/AndroidRuntime: FATAL EXCEPTION: AsyncTask #1
Process: com.my.app.appname, PID: 2521
java.lang.RuntimeException: An error occured while executing doInBackground()
at android.os.AsyncTask$3.done(AsyncTask.java:300)
at java.util.concurrent.FutureTask.finishCompletion(FutureTask.java:355)
at java.util.concurrent.FutureTask.setException(FutureTask.java:222)
at java.util.concurrent.FutureTask.run(FutureTask.java:242)
at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:231)
at java.util.conurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112)
java.util.conurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)
Caused by: java.lang.NoClassDefFoundError: Failed resolution of: Ljavax/xml/stream/XMLInputFactory;
at org.apache.olingo.odata2.core.commons.XmlHelper.createStreamReader(XmlHelper.java:41)
org.apache.olingo.odata2.core.edm.provider.EdmxProvider.parse(EdmxProvider.java:50)
org.apache.olingo.odata2.core.ep.ProviderFacadeImpl.readMetadata(ProviderFacadeImpl.java:224)
org.apache.olingo.odata2.api.ep.EntityProvider.readMetadata(EntityProvider.java:844)
at connectivity.MyClass.doInBackground(MyClass.java:153)
at connectivity.MyClass.doInBackground(MyClass.java:38)
at android.os.AsyncTask$2.call(AsyncTask.java:288)
at java.util.concurrent.FutureTask.run(FutureTask.java:237) <4 more...>
Caused by: java.lang.ClassNotFoundException: Didn't find class "javax.xml.stream.XMLInputFactory" on path: DexPathList[[zip file "/data/app/com.my.app.appname-2/base.apk"],nativeLibraryDirectories=[/vendor/lib, /system/lib]]
at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:56)
at java.lang.ClassLoader.loadClass(ClassLoader.java:511)
at java.lang.ClassLoader.loadClass(ClassLoader.java:469) <12 more...>
Suppressed: java.lang.ClassNotFoundException: javax.xml.stream.XmlInputFactory
at java.lang.Class.classForName(Native Method)
at java.lang.BootClassLoader.findClass(ClassLoader.java:781)
at java.lang.BootClassLoader.findClass(ClassLoader.java:841)
at java.lang.ClassLoader.loadClass(ClassLoader.java:504)
... 13 more
Caused by: java.lang.NoClassDefFoundError: Class not found using the boot class loader; no stack available

我的问题是:
(如何)我可以解决这个问题吗?
(我在某处读到 Android 可能不支持缺少的类?)
切换到 Apache Olingo OData 4.0 会有帮助吗?
(我需要使用 OData V2 服务,如果 Olingo V4 在 Android 上支持此服务,我可能会尝试迁移我的客户端...)

提前致谢!

最佳答案

您必须自己重新打包 javax.xml.stream 类,因为 Android 不支持 XML。 Olingo V4 在 V4 下载页面上有一个特殊的 android 打包客户端:http://olingo.apache.org/doc/odata4/download.html

Olingo V2 没有此功能,因为在创建 V2 库时主要关注服务器端实现。这就是为什么客户端缺少很多便利的原因。

关于android - 适用于 Android 的 Olingo OData 2.0 - 对 javax.xml.stream.XMLInputFactory 的依赖,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32551460/

相关文章:

html - 网站在 Firefox 中显示错误

matlab - Matlab 中的兼容性测试

android - 如何在 Flutter 中制作水平数字选择器小部件?

odata - 带有过滤器的 SAPUI5 自动绑定(bind)智能表

odata - 如何在OData上扩展多个属性

odata - OData 绑定(bind)中的多个 $expand 参数

objective-c - swift 的 DJI Virtual Sticks 控制

android - 可以显示表格的网格吗?

android - java.lang.NullPointerException - AutoCompleteTextView - hive

Android View.setKeepScreenOn() - 它在 View 消失时适用吗?