使用 OS Lollipop 进行 Web 服务调用的设备 HTC M8 上的应用程序崩溃
App crash on device HTC M8 with OS Lollipop for web service call
使用 ksoap 调用 Web 服务时 Android Lollipop 上的应用程序崩溃。
请查看错误日志
java.lang.NoSuchFieldError: No instance field headerOut of type [Lorg/kxml2/kdom/Element; in class Lorg/ksoap2/serialization/SoapSerializationEnvelope; or its superclasses (declaration of 'org.ksoap2.serialization.SoapSerializationEnvelope' appears in /system/framework/wifi-service.jar)
at com.-----.---------.-----.----.services.AuthenticateUser.createHeader(AuthenticateUser.java:77)
at com.-----.---------.-----.----.services.AuthenticateUser.authenticateUser(AuthenticateUser.java:49)
at com.-----.---------.-----.----.services.---------GenericServiceThread.callWS(GenericServiceThread.java:219)
at com.-----.---------.-----.----.services.---------GenericServiceThread.invokeWebServiceApi(GenericServiceThread.java:106)
at com.-----.---------.-----.----.services.---------GenericServiceThread.run(GenericServiceThread.java:89)
我已经在 Android 5.0 版的 Nexus 4 模拟器上测试了相同的应用程序并且运行良好。
我正在使用以下代码调用网络服务
mHttpTransportSE = new AndroidHttpTransport (url);
mHttpTransportSE.debug = true; // this is optional, use it if you don't
mHttpTransportSE.call(Configuration.COM_SOAP_ACTION_AUTHENTICATEUSER, envelope);
result = envelope.getResponse();
我也已将 AndroidHttpTransport 更改为 HttpTransportSE 但不确定。
此更改是否解决了我的问题?
这个问题还有其他解决方案吗?
提前致谢。
同样的问题。看起来 HTC 使用的是他们自己的 ksoap2。看
“https://code.google.com/p/ksoap2-android/issues/detail?id=205&can=1&start=200”
我通过将 ksoap2 包名称更改为 ksoap2clone 解决了这个问题。我不知道解决方案是好的,但它现在正在工作。如果您找到更好的解决方案,请分享。
文件是 here.
我有同样的问题 (HTC M8),但我使用的是带有依赖项的 ksoap2 3.4.0 jar。从堆栈跟踪来看,很明显 HTC 的某个人认为包含 ksoap2 是个好主意。不幸的是,他们没有考虑清楚这一点,并在 Apache Commons 和 HttpClient 上犯了与 Google 相同的错误。
重命名我使用的包 jarjar,它似乎工作正常。
对于任何需要快速解决方案的人,这里有 jarjar 规则和命令行:
rules.txt
rule org.ksoap2.** org.repackage.ksoap2.@1
命令行
java -jar jarjar.jar process rules.txt ksoap2-android-assembly-3.4.0-jar-with-dependencies.jar ksoap2-repackaged.jar
使用 ksoap 调用 Web 服务时 Android Lollipop 上的应用程序崩溃。
请查看错误日志
java.lang.NoSuchFieldError: No instance field headerOut of type [Lorg/kxml2/kdom/Element; in class Lorg/ksoap2/serialization/SoapSerializationEnvelope; or its superclasses (declaration of 'org.ksoap2.serialization.SoapSerializationEnvelope' appears in /system/framework/wifi-service.jar)
at com.-----.---------.-----.----.services.AuthenticateUser.createHeader(AuthenticateUser.java:77)
at com.-----.---------.-----.----.services.AuthenticateUser.authenticateUser(AuthenticateUser.java:49)
at com.-----.---------.-----.----.services.---------GenericServiceThread.callWS(GenericServiceThread.java:219)
at com.-----.---------.-----.----.services.---------GenericServiceThread.invokeWebServiceApi(GenericServiceThread.java:106)
at com.-----.---------.-----.----.services.---------GenericServiceThread.run(GenericServiceThread.java:89)
我已经在 Android 5.0 版的 Nexus 4 模拟器上测试了相同的应用程序并且运行良好。
我正在使用以下代码调用网络服务
mHttpTransportSE = new AndroidHttpTransport (url);
mHttpTransportSE.debug = true; // this is optional, use it if you don't
mHttpTransportSE.call(Configuration.COM_SOAP_ACTION_AUTHENTICATEUSER, envelope);
result = envelope.getResponse();
我也已将 AndroidHttpTransport 更改为 HttpTransportSE 但不确定。
此更改是否解决了我的问题?
这个问题还有其他解决方案吗?
提前致谢。
同样的问题。看起来 HTC 使用的是他们自己的 ksoap2。看 “https://code.google.com/p/ksoap2-android/issues/detail?id=205&can=1&start=200”
我通过将 ksoap2 包名称更改为 ksoap2clone 解决了这个问题。我不知道解决方案是好的,但它现在正在工作。如果您找到更好的解决方案,请分享。
文件是 here.
我有同样的问题 (HTC M8),但我使用的是带有依赖项的 ksoap2 3.4.0 jar。从堆栈跟踪来看,很明显 HTC 的某个人认为包含 ksoap2 是个好主意。不幸的是,他们没有考虑清楚这一点,并在 Apache Commons 和 HttpClient 上犯了与 Google 相同的错误。
重命名我使用的包 jarjar,它似乎工作正常。
对于任何需要快速解决方案的人,这里有 jarjar 规则和命令行:
rules.txt
rule org.ksoap2.** org.repackage.ksoap2.@1
命令行
java -jar jarjar.jar process rules.txt ksoap2-android-assembly-3.4.0-jar-with-dependencies.jar ksoap2-repackaged.jar