java.lang.NoSuchMethodError:okhttp3.internal.http.HttpEngine.recover

问题描述 投票:2回答:2

我有一个使用kso​​ap与底层okhttp连接的应用程序。

它的大部分时间都可以工作 - 但是在连接重试期间,应用程序会因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

我不知道如何继续调试这个问题或者我是否做了一些明显错误的事情。

谢谢你的帮助。


编辑:

新理论 - ksoap2-android有a reference到okhttp库的一部分:

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

HttpEngine方法包含在主要的okhttp库中 - 可能是我对okhttp v3.3.0的引用提供了kazap2库中HttpEngine v3.2.0使用的HttpURLConnectionImpl吗?

我已将我的okhttp依赖关系降级为compile 'com.squareup.okhttp3:okhttp:3.2.0'并安装在一些设备上进行测试。如果这是问题,我会更新答案。

android android-ksoap2 okhttp3
2个回答
2
投票

对延迟道歉 - 在我的gradle文件中恢复到compile 'com.squareup.okhttp3:okhttp:3.2.0'确实解决了这个问题。


0
投票

将其更新到最新版本:implementation("com.squareup.okhttp3:okhttp:3.13.1")。它对我的情况有帮助。

© www.soinside.com 2019 - 2024. All rights reserved.