android - okHttp3 java.lang.NoSuchMethodError : No virtual method setCallWebSocket 错误

标签 android okhttp

我已经从 okhttp + retrofit 更新到 okhttp3 + retrofit2 但我的应用程序没有启动导致这个异常

FATAL EXCEPTION: EventThread
Process: appli.speaky.com, PID: 14705
java.lang.NoSuchMethodError: No virtual method setCallWebSocket(Lokhttp3/Call;)V in class Lokhttp3/internal/Internal; or its super classes (declaration of 'okhttp3.internal.Internal' appears in /data/data/appli.example.com/files/instant-run/dex/slice-okhttp-3.6.0_29bb10e5f590229716bfa8daf196d09ea67f56a8-classes.dex)
    at okhttp3.ws.WebSocketCall.enqueue(WebSocketCall.java:108)
    at io.socket.engineio.client.transports.WebSocket.doOpen(WebSocket.java:84)
    at io.socket.engineio.client.Transport$1.run(Transport.java:82)
    at io.socket.thread.EventThread.exec(EventThread.java:55)
    at io.socket.engineio.client.Transport.open(Transport.java:77)
    at io.socket.engineio.client.Socket.probe(Socket.java:472)
    at io.socket.engineio.client.Socket.onOpen(Socket.java:485)
    at io.socket.engineio.client.Socket.onHandshake(Socket.java:526)
    at io.socket.engineio.client.Socket.onPacket(Socket.java:499)
    at io.socket.engineio.client.Socket.access$1000(Socket.java:31)
    at io.socket.engineio.client.Socket$5.call(Socket.java:313)
    at io.socket.emitter.Emitter.emit(Emitter.java:117)
    at io.socket.engineio.client.Transport.onPacket(Transport.java:134)
    at io.socket.engineio.client.transports.Polling.access$700(Polling.java:17)
    at io.socket.engineio.client.transports.Polling$2.call(Polling.java:124)
    at io.socket.engineio.parser.Parser.decodePayload(Parser.java:251)
    at io.socket.engineio.client.transports.Polling._onData(Polling.java:134)
    at io.socket.engineio.client.transports.Polling.onData(Polling.java:106)
    at io.socket.engineio.client.transports.PollingXHR$5$1.run(PollingXHR.java:111)
    at io.socket.thread.EventThread$2.run(EventThread.java:80)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1133)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:607)
    at java.lang.Thread.run(Thread.java:761)

最佳答案

我也遇到了同样的问题。问题是我使用的是 socket 0.8.0,我认为它与 OKHTTP websocket implem 有冲突。

升级到最新版本的 socket.io 后

compile('io.socket:socket.io-client:0.8.3') {
    exclude group: 'org.json', module: 'json'
}

并且还使用了最新版本的 OKHTTP (无需包含 okhttp-ws)

compile "com.squareup.okhttp3:okhttp:3.7.0"
compile "com.squareup.okhttp3:logging-interceptor:3.7.0"

我的应用程序在第一次加载时没有崩溃,它正在连接到套接字。拦截器也没有任何冲突,并且在 logcat 上按预期进行记录。

有了这个,就没有必要降级 okHTTP 的版本了,它在过去一直是有效的解决方案。 :)

关于android - okHttp3 java.lang.NoSuchMethodError : No virtual method setCallWebSocket 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42209251/

相关文章:

android - 如果 View 永远不可见,我应该在 View 生命周期的哪个点取消订阅?

java - 陷入解析 JSON 的困境

java - 支付网关集成时获取 SSLException

Retrofit2 - OkHttp ConnectionPool 线程增长到 100 多个线程。为什么?

android - 改造 URL 未正确翻译

android - 由于某种原因,HttpLoggingInterceptor 没有记录 OkHttp 正文的响应

java - 为什么我的 Android 主屏幕应用程序小部件无法正常工作?

java - 每秒在谷歌地图中添加新标记

android - javax.net.ssl.SSLHandshakeException : java. lang.IllegalArgumentException : Invalid input to toASCII: ip_nbae7bac35. kodrive.xyz

android - 方法 onTouchEvent 未被调用