Подтвердить что ты не робот

Ошибка приложения на устройстве HTC M8 с ОС Lollipop для вызова веб-службы

Сбой приложения на Android Lollipop при вызове веб-службы с использованием ksoap.

См. журнал ошибок

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)

Я тестировал одно и то же приложение на эмуляторе Nexus 4 для Android версии 5.0 и отлично работаю.

Я использую ниже код для вызова webservice

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, но не уверен в этом.
Является ли это изменение решением моей проблемы?
Есть ли другое решение этой проблемы?

Спасибо заранее.

4b9b3361

Ответ 1

Я решил это, изменив имя пакета ksoap2 на ksoap2clone. Я не знаю, что решение хорошо, но теперь оно работает. Пожалуйста, поделитесь, если вы найдете лучшее решение.

Файл здесь.

Ответ 3

У меня такие же проблемы (HTC M8), но я использую ksoap2 3.4.0 jar с зависимостями. Из stacktrace было очевидно, что кто-то в HTC подумал, что было бы неплохо включить ksoap2. К сожалению, они не думали об этом и совершили ту же ошибку, что и Google с Apache Commons и HttpClient.

Чтобы переименовать пакет, я использовал jarjar, и, похоже, он работает нормально.

Для тех, кто нуждается в быстром решении, вы найдете правила jarjar и командную строку:

Rules.txt

rule org.ksoap2.** [email protected]

Командная строка

java -jar jarjar-1.4.jar process rules.txt ksoap2-android-assembly-3.4.0-jar-with-dependencies.jar ksoap2-repackaged.jar