android - java.lang.NoSuchMethodError : okhttp3.内部.http.HttpEngine.recover

标签 android android-ksoap2 okhttp

我有一个应用程序,它使用 ksoap 和底层 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 的引用提供了 HttpEngine ksoap2 库中的 HttpURLConnectionImpl v3.2.0 正在使用哪个?

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

最佳答案

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

关于android - java.lang.NoSuchMethodError : okhttp3.内部.http.HttpEngine.recover,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37598917/

相关文章:

android - 在android中使用Base64改造图像上传

java - 有没有办法从 okhttp3 的失败中获取原始的 http 发布消息?

java - OkHTTP (v3.0.0-RC1) 带参数的 Post 请求

javascript - 如何等待子 Activity 完成

android - 有什么方法可以检测图像是从 picasso 的缓存中加载的吗?

java - Android 上使用 ksoap2 进行双倍操作?

java.io.IOException : HTTP request failed, HTTP 状态:500 (ksoap2)

android - 更改图表引擎中系列名称的文字大小

使用 HttpUrlConnection 获取 "already connected"的 Android POST 请求

android - 如何防止 Android 中可怕的 KSOAP2 连接超时