2016-06-02 6 views
2

У меня есть приложение, которое использует ksoap с базовым соединением okhttp.java.lang.NoSuchMethodError: okhttp3.internal.http.HttpEngine.recover

Большая часть времени, когда он работает, однако во время повторной попытки подключения приложение выходит из строя с помощью NoSuchMethodError. Стек след ниже

Fatal Exception: java.lang.NoSuchMethodError: okhttp3.internal.http.HttpEngine.recover 
    at okhttp3.internal.huc.HttpURLConnectionImpl.execute(HttpURLConnectionImpl.java:493) 
    at okhttp3.internal.huc.HttpURLConnectionImpl.connect(HttpURLConnectionImpl.java:127) 
    at okhttp3.internal.huc.HttpURLConnectionImpl.getOutputStream(HttpURLConnectionImpl.java:261) 
    at org.ksoap2.transport.OkHttpServiceConnectionSE.openOutputStream(OkHttpServiceConnectionSE.java:124) 
    at org.ksoap2.transport.HttpTransportSE.sendData(HttpTransportSE.java:292) 
    at org.ksoap2.transport.HttpTransportSE.call(HttpTransportSE.java:184) 
    at org.ksoap2.transport.HttpTransportSE.call(HttpTransportSE.java:118) 
    at org.ksoap2.transport.HttpTransportSE.call(HttpTransportSE.java:113) 
    at uk.org.xibo.xmds.CheckConnection.run(CheckConnection.java:106) 
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112) 
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587) 
    at java.lang.Thread.run(Thread.java:841) 

Я использую ProGuard, и добавили правила, чтобы okhttp осталась одна:

-keepattributes Signature 
-keepattributes *Annotation* 
-keep class okhttp3.** { *; } 
-keep interface okhttp3.** { *; } 
-dontwarn okhttp3.** 

Мой файл класса содержит следующие зависимости:

compile 'com.squareup.okio:okio:1.8.0' 
compile 'com.squareup.okhttp3:okhttp:3.3.0' 
compile 'com.google.code.ksoap2-android:ksoap2-android:3.6.1' 

Я пробовал декомпилировать полученный APK и подтвердить, что метод okhttp3.internal.http.HttpEngine.recover существует.

Источник пропавшей метод здесь: https://github.com/square/okhttp/blob/master/okhttp-urlconnection/src/main/java/okhttp3/internal/huc/HttpURLConnectionImpl.java#L495

Я не знаю, как продолжить отладку этот вопрос, или я сделал что-то явно не так.

Спасибо за любую помощь.


EDIT:

Новая теория - ksoap2-андроид имеет a reference к части okhttp библиотеки:

<dependency> 
    <groupId>com.squareup.okhttp3</groupId> 
    <artifactId>okhttp-urlconnection</artifactId> 
    <version>3.2.0</version> 
</dependency> 

Метод HttpEngine содержится в главной библиотеке okhttp - может быть, my ссылка на okhttp v3.3.0 предоставляет HttpEngine, который используется HttpURLConnectionImpl v3.2.0 из библиотеки ksoap2?

Я понизил мою зависимость okhttp до compile 'com.squareup.okhttp3:okhttp:3.2.0' и установил на несколько устройств для тестирования. Если это проблема, я обновлю ответ.

ответ

2

Извинения за задержку - возврат к compile 'com.squareup.okhttp3:okhttp:3.2.0' в моем файле градации разрешил проблему.

+0

Да, путем снижения зависимости okhttp к '' '' 'compile 'com.squareup.okhttp3: okhttp: 3.2.0''''' работает только. –