2016-06-02 12 views
2

Ich habe eine Anwendung, die ksoap mit einer zugrunde liegenden okhttp Verbindung verwendet.java.lang.NoSuchMethodError: okhttp3.internal.http.HttpEngine.recover

Die meiste Zeit funktioniert es - jedoch während eines Verbindungsversuchs stürzt die Anwendung mit einem NoSuchMethodError ab. Stack-Trace

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) 

ich proguard tun verwenden, und haben hinzugefügt Regeln, so dass okhttp allein gelassen wird:

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

Meine Klasse-Datei enthält diese Abhängigkeiten:

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' 

ich versucht habe, Dekompilieren der resultierenden APK und kann bestätigen, dass die okhttp3.internal.http.HttpEngine.recover Methode existiert.

Die Quelle für die fehlende Methode ist hier: https://github.com/square/okhttp/blob/master/okhttp-urlconnection/src/main/java/okhttp3/internal/huc/HttpURLConnectionImpl.java#L495

Ich bin nicht sicher, wie dieses Problem gehen Debuggen oder ob ich etwas offensichtlich falsch gemacht haben.

Vielen Dank für Ihre Hilfe.


EDIT:

Neue Theorie - ksoap2-android hat a reference auf einen Teil der okhttp Bibliothek:

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

Die HttpEngine Methode wird in der Haupt okhttp Bibliothek enthalten - es könnte sein, dass mein Verweis auf okhttp v3.3.0 liefert die HttpEngine, die von HttpURLConnectionImpl v3.2.0 aus der ksoap2-Bibliothek verwendet wird?

Ich habe meine okhttp-Abhängigkeit auf compile 'com.squareup.okhttp3:okhttp:3.2.0' herabgestuft und habe auf einigen Geräten zum Testen installiert. Wenn dies das Problem ist, werde ich mit der Antwort aktualisieren.

Antwort

2

Entschuldigung für die Verzögerung - zurück zu compile 'com.squareup.okhttp3:okhttp:3.2.0' in meiner Gradle-Datei löste das Problem.

+0

Ja, durch Downgrading okhttp Abhängigkeit zu '' '' compile 'com.squareup.okhttp3: okhttp: 3.2.0''''' funktioniert nur. –

Verwandte Themen